sql中全形字元與半形字元檢驗問題

來源:互聯網
上載者:User
在項目中遇到的問題。半形字元F00000和全形字元F00000比較的結果是一樣的,導致引起的重複的主鍵問題,全形的ASCII碼是0xA3A8 ,而半形的是0x28。那麼為什麼SQL Server會認為是一樣的呢?

問題其實就出在資料庫的定序上,仔細研讀一下SQL Server的文檔;SQL Server的定序由這樣幾部分組成,字碼頁、區分大小寫、區分重音、區分寬度。最後一個在SQL Server的線上說明中沒有進一步提及,其實本篇遇到的問題就是由於這個原因造成的。區分寬度:指定 SQL Server 區分相同字元的單位元組標記法(半形)和雙位元組標記法(全形)。如果沒有選擇,則 SQL Server 將認為相同字元的單位元組標記法和雙位元組標記法等效。

預設,安裝SQL Server中文版的時候,SQL Server幫你選擇的定序是Chinese_PRC_CI_AS(Chinese-PRC, case-insensitive, accent-sensitive, kanatype-insensitive, width-insensitive),是中文,不區分大小寫、區分重音、不區分假名、不區分寬度。因此,自然就認同F00000=F00000;所以,正確的選擇應該是,尾碼為WS的中文定序。

本例中我們應該選擇Chinese_PRC_CI_AS_WS。

我們來看一下,指定定序是Chinese_PRC_CI_AS_WS後,怎麼樣了? 

select 1 where 'F00000'='F00000'

collate Chinese_PRC_CI_AS_WS

(所影響的行數為 0 行)

重要提示:

如何察看使用那個定序呢?可以使用下面的SQL語句。

SELECT *

FROM ::fn_helpcollations()

可以查詢所有定序的資訊。

查出所有中文定序的資訊

SELECT * FROM

(

SELECT *

FROM ::fn_helpcollations()) A

WHERE name like 'Chinese%'

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.