一、問題背景
程序在鏈接SQL Server 數據庫的時候,比如人的一個表,裏面有性別sex的字段,設置的約束爲sex='男' or sex='女'。
問題所在:但是在寫程序的時候,發現這個字段無論是寫男還是女都寫不進數據庫。
後來經過排查發現原本設置得好好的CHECK約束亂碼了,例如下圖:
發覺編碼不對後就排查了跟編碼相關的地方,發現創建數據庫的時候排序規則沒有選對,不是支持中文字符集的排序規則
將數據庫的排序規則改爲合適的即可解決此小問題
二、排序規則簡介
在Microsoft SQL Server 中,字符串的物理存儲排序規則控制。排序規則制定表示每個字符的位模式以及存儲和比較字符所使用的規則。
排序規則名稱由兩部分構成,前半部分是指排序規則所支持的字符集。
如:Chinese_PRC_CS_AI_WS
前半部分:指UNICODE字符集,Chinese_PRC_指針對大陸簡體字UNICODE的排序規則,按拼音排序。
Chinese_PRC_Stroke表示按漢字筆畫排序
排序規則的後半部分即 後綴 含義:
_BIN 二進制
_CI(CS) 是否區分大小寫,CI不區分,CS區分(case-insensitive/case-ensitive)
_AI(AS) 是否區分重音,AI不區分,AS區分(accent-insensitive/accent-sensitive)
_KI(KS) 是否區分假名類型,KI不區分,KS區分(kanatype-insensitive/kanatype-sensitive)
_WI(WS) 是否區分寬度,WI不區分,WS區分(width-insensitive/width-sensitive)
區分大小寫:將大寫字母和小寫字母視爲不等。
區分重音:將重音和非重音字母視爲不等。
區分假名:將片假名和平假名日語音節視爲不等。
區分寬度:將半角字符和全角字符視爲不等。