合 MSSQL中的大小写和排序规则问题
Tags: MSSQLSQL Server排序规则大小写敏感
现象
如下的SQL语句有的时候报错,有的时候正常:
1 | SELECT TABLE_CATALOG, TABLE_SCHEMA,TABLE_NAME FROM INFORMATION_SCHEMA.tables where TABLE_TYPE='BASE TABLE' AND TABLE_SCHEMA='dbo'; |
原因:数据库大小写敏感性问题,即排序规则问题。
排序规则
在 SQL Server 中,排序规则(Collation)定义了用于比较和排序字符串数据的规则和规范。它影响字符串的排序顺序、大小写敏感性、重音符号和特殊字符的处理方式等。
SQL Server 的排序规则由一组属性定义,包括以下方面:
- 排序规则名称:每个排序规则都有一个唯一的名称,例如 "Latin1_General_CI_AS"。
- 排序规则标识符(LCID):用于标识特定排序规则的整数值。
- 大小写敏感性:定义了字符串比较时是否区分大小写。CI 表示不区分大小写,CS 表示区分大小写。
- 重音符号敏感性:定义了字符串比较时是否区分重音符号。AI 表示不区分重音符号,AS 表示区分重音符号。
- 宽字符敏感性:定义了对宽字符(例如日语、韩语、中文等)的排序方式。AI 表示不区分宽字符,AS 表示区分宽字符。
- 字符集:定义了排序规则使用的字符集(例如 Latin1_General 使用的是拉丁字符集)。
SQL Server 提供了一系列预定义的排序规则,每个排序规则具有不同的特性和适用场景。常见的排序规则包括:
- Latin1_General_CI_AS:不区分大小写,不区分重音符号,不区分宽字符的拉丁字符集排序规则。
- SQL_Latin1_General_CP1_CI_AS:不区分大小写,不区分重音符号的拉丁字符集排序规则。
- Chinese_PRC_CI_AS:不区分大小写的中文字符集排序规则。
- Japanese_CI_AS:不区分大小写的日语字符集排序规则。
除了预定义的排序规则,SQL Server 还支持自定义排序规则。你可以根据自己的需求创建自定义排序规则,并根据需要指定各种属性。