數據庫管理系統(DBMS)中字段約束設置亂碼問題

一、問題背景

程序在鏈接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)

區分大小寫:將大寫字母和小寫字母視爲不等。

區分重音:將重音和非重音字母視爲不等。

區分假名:將片假名和平假名日語音節視爲不等。

區分寬度:將半角字符和全角字符視爲不等。

發佈了106 篇原創文章 · 獲贊 136 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章