T-SQL筆記27_資料庫定序_中文where條件過濾查不出來

 
有時可能會遇到在資料庫中明明存有的一筆紀錄
享用該筆某column的中文欄位去filter查詢
但會無法查出來的窘境
此時可先以下列方向做問題確認


法1.可檢查該column的型別是否為unicode存的(nchar,nvarchar,ntext)
那就在欄位前方加上N即可(在insert,update,select時,要加N)
通常發生在資料庫為英文語系的定序導致

法2.更改資料庫定序(慎用)
若定序設定是用Chinese_Taiwan前綴就不需要前面加N的方法




在定序設定層級可細分為

判斷當前資料庫定序Collation(資料庫裡字元集的排列方式)為何
SELECT DATABASEPROPERTYEX ('DB名稱' ,'Collation' )











定序描述

Chinese_PRC_CI_AS

Chinese-PRC、不區分大小寫、區分重音、不區分假名、不區分寬度

Chinese_Taiwan_Stroke_CI_AS

Chinese-Taiwan-Stroke、不區分大小寫、區分重音、不區分假名、不區分寬度

Finnish_Swedish_CI_AS

芬蘭文、瑞典文和瑞典文 (芬蘭)、不區分大小寫、區分重音、卡納型不區分、不區分假名

French_CI_AS

法文、不區分大小寫、區分重音、不區分假名、不區分寬度

Hebrew_BIN

希伯來文、二進位排序

Hebrew_CI_AS

希伯來文、不區分大小寫、區分重音、不區分假名、不區分寬度

Japanese_BIN

日文、二進位排序

Japanese_CI_AS

日文、不區分大小寫、區分重音、不區分假名、不區分寬度

Japanese_CS_AS

日文、區分大小寫、區分重音、不區分假名、不區分寬度

Korean_Wansung_CI_AS

Korean-Wansung、不區分大小寫、區分重音、不區分假名、不區分寬度

Latin1_General_100_BIN

Latin1-General-100、二進位排序

Latin1_General_100_BIN2

Latin1-General-100、二進位代碼點比較排序

Latin1_General_100_CI_AS

Latin1-General-100、不區分大小寫、區分重音、不區分假名、不區分寬度

Latin1_General_BIN

Latin1-General、二進位排序

Latin1_General_BIN2

Latin1-General、二進位代碼點比較排序

Latin1_General_CI_AI

Latin1-General、不區分大小寫、不區分重音、不區分假名、不區分寬度

Latin1_General_CI_AS

Latin1-General、不區分大小寫、區分重音、不區分假名、不區分寬度

Latin1_General_CI_AS_KS

Latin1-General、不區分大小寫、區分重音、區分假名、不區分寬度

Latin1_General_CS_AS

Latin1-General、區分大小寫、區分重音、不區分假名、不區分寬度

Modern_Spanish_CI_AS

Modern-Spanish、不區分大小寫、區分重音、不區分假名、不區分寬度

SQL_1xCompat_CP850_CI_AS

Latin1-General、不區分大小寫、區分重音、不區分假名、不區分寬度,適用於非 Unicode 資料字碼頁 850 上的 Unicode 資料、SQL Server 排序 49

SQL_Latin1_General_CP1_CI_AI

Latin1-General、不區分大小寫、不區分重音、不區分假名、不區分寬度,適用於非 Unicode 資料字碼頁 1252 上的 Unicode 資料、SQL Server 排序 54

SQL_Latin1_General_CP1_CI_AS (預設值)

Latin1-General、不區分大小寫、區分重音、不區分假名、不區分寬度,適用於非 Unicode 資料字碼頁 1252 上的 Unicode 資料、SQL Server 排序 52

SQL_Latin1_General_CP1_CS_AS

Latin1-General、不區分大小寫、區分重音、不區分假名、不區分寬度,適用於非 Unicode 資料字碼頁 1252 上的 Unicode 資料、SQL Server 排序 51

SQL_Latin1_General_CP437_CI_AI

Latin1-General、不區分大小寫、不區分重音、不區分假名、不區分寬度,適用於非 Unicode 資料字碼頁 437 上的 Unicode 資料、SQL Server 排序 34

SQL_Latin1_General_CP850_BIN2

Latin1-General、二進位代碼點比較排序,適用於非 Unicode 資料字碼頁 850 上的 Unicode 資料、SQL Server 排序 40

SQL_Latin1_General_CP850_CI_AS

Latin1-General、不區分大小寫、區分重音、不區分假名、不區分寬度,適用於非 Unicode 資料字碼頁 850 上的 Unicode 資料、SQL Server 排序 42

SQL_Latin1_General_CP1256_CI_AS

Latin1-General、不區分大小寫、區分重音、不區分假名、不區分寬度,適用於非 Unicode 資料字碼頁 1256 上的 Unicode 資料、SQL Server 排序 146



常見的定序格式
[SortRules]_[CI/CS_AI/AS_WS_KS_BIN]

[SortRules] 排序時套用排序規則之字母或語言的字串
常見的中文字元定序有分為
Chinese_Taiwan_Stroke_CI_AS             以中文字筆畫數(SQL Server在台灣地區的預設定序)
Chinese_Taiwan_BOPOMOFO_CI_AI  以注音符號(ㄅ...ㄆ...ㄇ...ㄈ...)
Chinese_Taiwan_Stroke_BIN                 使用binary(大小寫有區分)

有時定序會影響查詢效能

CI/CS:Case Sensitivity
CI 指定不區分大小寫,CS 指定區分大小寫

AI/AS:Accent Sensitivity
AI 指定不區分腔調字,AS 指定區分腔調字(通常用在歐洲語系,如法文)

KS:Kana Sensitivity 指定區分假名(用在日文)

WS:Width Sensitivity 指定區分全半形,不寫就表示不區分

BIN:指定要用的二進位排序順序,通常是區分大小寫、全半形


















Ref:
[SQL Server] SQL語法 Where 條件查詢簡體中文問題

SQL Server 查询条件是中文查不出来

SQLServer 数据库无法查询中文

Microsoft SQL Server 的定序和字元集

請問關於Chinese_Taiwan_Stroke_BIN定序?

[SQL]欄位型態為VARCHAR,查詢條件值有多加上N還是會有些一影響的哦!

如何做MS SQL定序(Collation) 轉換

Chinese_Taiwan_Stroke_BIN 與 Chinese_Taiwan_Stroke_CI_AS 之間的定序衝突

無法解析 UNION 作業中 "Chinese_Taiwan_Stroke_CI_AS" 與 "Chinese_Taiwan_Stroke_BIN" 之間的定序衝突

資料庫定序到底是什麼碗糕?

留言

這個網誌中的熱門文章

經得起原始碼資安弱點掃描的程式設計習慣培養(五)_Missing HSTS Header

經得起原始碼資安弱點掃描的程式設計習慣培養(三)_7.Cross Site Scripting(XSS)_Stored XSS_Reflected XSS All Clients

(2021年度)駕訓學科筆試準備題庫歸納分析_法規是非題