国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

SQL Server中全角和半角字符的比較問題

2024-08-31 00:48:26
字體:
供稿:網(wǎng)友

/*------------------------------------------------------------------------------------

/*歡迎轉(zhuǎn)載,請保留本聲明信息

/*作者:翁   彥   [email protected]

/*------------------------------------------------------------------------------------

這是一個在我實際一個項目中遇到的問題。03bhl01001(上海)和03bhl01001(上海)比較的結(jié)果是一樣的。導致引起的重復的主鍵問題。

03bhl01001(上海)和03bhl01001(上海)差別,就在于前者的括號是全角的括號字符,后者是半角的括號字符。全角的括號字符和半角的括號字符的ascii碼顯然是不一樣的。全角的( ascii碼是0xa3a8 ,而半角的( 是0x28。那么為什么sql server會認為是一樣的呢?

問題其實就出在數(shù)據(jù)庫的排序規(guī)則上,讓我們在仔細研讀一下sql server的文檔。sql server的排序規(guī)則由這樣幾部分組成,代碼頁、區(qū)分大小寫、區(qū)分重音、區(qū)分寬度。最后一個在sql server的聯(lián)機幫助中沒有進一步提及,其實本篇遇到的問題就是由于這個原因造成的。區(qū)分寬度:指定 sql server 區(qū)分相同字符的單字節(jié)表示法(半角)和雙字節(jié)表示法(全角)。如果沒有選擇,則 sql server 將認為相同字符的單字節(jié)表示法和雙字節(jié)表示法等效。

缺省,安裝sql server中文版的時候,sql server幫你選擇的排序規(guī)則是chinese_prc_ci_as(chinese-prc, case-insensitive, accent-sensitive, kanatype-insensitive, width-insensitive),是中文,不區(qū)分大小寫、區(qū)分重音、不區(qū)分假名、不區(qū)分寬度。因此,自然就認同03bhl01001(上海)=03bhl01001(上海)。

所以,正確的選擇應(yīng)該是,后綴為ws的中文排序規(guī)則。本例中我們應(yīng)該選擇chinese_prc_ci_as_ws。

我們來看一下,指定排序規(guī)則是chinese_prc_ci_as_ws后,怎么樣了?

 

select 1 where '03bhl01001(上海)'='03bhl01001(上海)'

collate chinese_prc_ci_as_ws

 

-----------

 

(所影響的行數(shù)為 0 行)

看來這個問題解決了。

重要提示:

如何察看使用那個排序規(guī)則呢?可以使用下面的sql語句。

select *

from ::fn_helpcollations()

可以查詢所有排序規(guī)則的信息。

查出所有中文排序規(guī)則的信息

select * from

(

select *

from ::fn_helpcollations()) a

where name like 'chinese%'

 
,歡迎訪問網(wǎng)頁設(shè)計愛好者web開發(fā)。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 南岸区| 吉林省| 祥云县| 唐河县| 搜索| 阿城市| 西乌珠穆沁旗| 龙海市| 治多县| 阳谷县| 余庆县| 乌鲁木齐市| 容城县| 舒城县| 武夷山市| 普格县| 疏勒县| 尼勒克县| 海晏县| 汉源县| 乐山市| 桂东县| 鸡东县| 大关县| 井冈山市| 肇源县| 龙里县| 兴国县| 湖南省| 甘德县| 吉林市| 闵行区| 兖州市| 石棉县| 九寨沟县| 平舆县| 高唐县| 吉木萨尔县| 鄱阳县| 双鸭山市| 镇雄县|