一、问题背景

程序在链接SQL Server 数据库的时候,比如人的一个表,里面有性别sex的字段,设置的约束为sex='男' or sex='女'。

数据库管理系统(DBMS)中字段约束设置乱码问题

问题所在:但是在写程序的时候,发现这个字段无论是写男还是女都写不进数据库。

后来经过排查发现原本设置得好好的CHECK约束乱码了,例如下图:

数据库管理系统(DBMS)中字段约束设置乱码问题

发觉编码不对后就排查了跟编码相关的地方,发现创建数据库的时候排序规则没有选对,不是支持中文字符集的排序规则

数据库管理系统(DBMS)中字段约束设置乱码问题

将数据库的排序规则改为合适的即可解决此小问题

数据库管理系统(DBMS)中字段约束设置乱码问题

二、排序规则简介

在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)

区分大小写:将大写字母和小写字母视为不等。

区分重音:将重音和非重音字母视为不等。

区分假名:将片假名和平假名日语音节视为不等。

区分宽度:将半角字符和全角字符视为不等。

相关文章:

  • 2022-12-23
  • 2021-09-21
  • 2022-12-23
  • 2021-06-22
  • 2021-12-02
  • 2022-01-01
  • 2022-01-27
  • 2022-12-23
猜你喜欢
  • 2021-12-22
  • 2021-12-06
  • 2021-07-18
  • 2021-07-03
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案