SELECT * FROM USER WHERE NAME = 'Vivi'
出來的結果竟然是
Id | Name
--- | ---
1 | Vivi
2 | vivi
沒有區分大小寫!!
查了一下原來是定序的問題
定序後面的那些參數:
CI:不區分大小寫。
CS:區分大小寫。
AS:區分有腔調及無腔調的字元,例如,「a」不等於「ấ」。
AI:不區分腔調字元。
KS:區分日文平假名與片假名,省略就是不區分。
WS:區分全形與半形,省略就是不區分。台灣的定序有兩種:Chinese_Taiwan_Bopomofo及Chinese_Taiwan_Stroke。Chinese_Taiwan_Bopomofo:用ㄅㄆㄇㄈ進行排序。
Chinese_Taiwan_Stroke:用筆畫進行排序。
CS:區分大小寫。
AS:區分有腔調及無腔調的字元,例如,「a」不等於「ấ」。
AI:不區分腔調字元。
KS:區分日文平假名與片假名,省略就是不區分。
WS:區分全形與半形,省略就是不區分。台灣的定序有兩種:Chinese_Taiwan_Bopomofo及Chinese_Taiwan_Stroke。Chinese_Taiwan_Bopomofo:用ㄅㄆㄇㄈ進行排序。
Chinese_Taiwan_Stroke:用筆畫進行排序。
辦法有兩種:
直接從屬性改資料庫的定序。
查詢後面加COLLATE強制改變定序。
查詢後面加COLLATE強制改變定序。
第一種方法也是最簡單的方法,直接改資料庫定序,永無後患~
設定路徑:對資料庫右鍵 -> 屬性 -> 選項 -> 定序
COLLATE強制改變定序
如果今天只是有特定幾個條件需要改變定序,那COLLATE就會是很好的方法!
直接提供程式碼給大家看:
SELECT * FROM USER WHERE NAME = 'Vivi' COLLATE Latin1_General_CS_AS;
輸出結果:
Id | Name
--- | ---
1 | Vivi
SELECT * FROM USER Order By Name COLLATE Latin1_General_CS_AS;
輸出結果:
Id | Name
--- | ---
1 | vivi
2 | Vivi
注意:COLLATE是要在每組條件個別加,不是在SQL最後寫一次就會讓所有的比對都區分大小寫。SELECT * FROM USER WHERE NAME = 'Vivi' COLLATE Latin1_General_CS_AS Order By Name COLLATE Latin1_General_CS_AS;
資料來源:https://ithelp.ithome.com.tw/articles/10313369
設定路徑:對資料庫右鍵 -> 屬性 -> 選項 -> 定序
COLLATE強制改變定序
如果今天只是有特定幾個條件需要改變定序,那COLLATE就會是很好的方法!
直接提供程式碼給大家看:
SELECT * FROM USER WHERE NAME = 'Vivi' COLLATE Latin1_General_CS_AS;
輸出結果:
Id | Name
--- | ---
1 | Vivi
SELECT * FROM USER Order By Name COLLATE Latin1_General_CS_AS;
輸出結果:
Id | Name
--- | ---
1 | vivi
2 | Vivi
注意:COLLATE是要在每組條件個別加,不是在SQL最後寫一次就會讓所有的比對都區分大小寫。SELECT * FROM USER WHERE NAME = 'Vivi' COLLATE Latin1_General_CS_AS Order By Name COLLATE Latin1_General_CS_AS;
資料來源:https://ithelp.ithome.com.tw/articles/10313369
沒有留言:
張貼留言