SQL 服务器/十六进制字符串作为主键,使用哪种排序规则?
SQL Server / hexadecimal string as primary key, which collation to use?
我正在处理一个数据库,其中 MD5 散列用作某些表的主键,类型为 char(32)。
过去,我只使用 int 作为主键来处理数据库,但在这个项目上,我别无选择。
我想知道应该使用什么排序规则来处理 char(32) 主键(包含十六进制字符串)?
编辑:
目前,数据库的排序规则是French_CI_AS。我想知道这种主键是否合适,或者我是否应该切换到 CS 或 BIN2 排序规则以获得更好的性能?
如果您在设置过程中没有更改排序规则,请根据此 Microsoft Article "When SQL Server Setup detects that the computer is running the U.S. English system locale, Setup automatically selects the Dictionary order, case-insensitive, for use with 1252 character set SQL Server 2008 collation ..."
排序规则有多种排序方式:
- 二进制 (BIN): 根据为每个字符定义的位模式对 SQL 服务器表中的数据进行排序和比较。二进制排序顺序区分大小写和重音。二进制也是最快的排序顺序
- Binary-Point (BIN2): 根据 Unicode 数据的 Unicode 代码点对 SQL 服务器表中的数据进行排序和比较。对于非 Unicode 数据,二进制代码点将使用与二进制排序相同的比较
- Case Sensitive (CS):区分大小写字母。如果选中,小写字母排在大写字母之前。
- 重音敏感 (AS): 区分重音字符和非重音字符。例如,'a' 不等于'ấ'。
- 假名敏感 (KS): 区分两种日语假名字符:平假名和片假名。
- 宽度敏感 (WS): 区分单字节字符和表示为双字节字符的相同字符。
并且十六进制值不区分大小写,也不区分宽度、假名。正如您在评论中提供的那样,默认排序规则是 French_CI_AS
(这意味着法语 - 不区分大小写 - 区分重音)所以它不区分大小写(这很好)并且它对重音敏感(十六进制不包含重音字符所以此功能不是必需的,但如果选择它不会影响任何东西)。
所以 French_CI_AS
归类对你的情况很有用
参考资料
旁注:完全不建议选择哈希码作为主键!!最好选择一个整数作为主键
我正在处理一个数据库,其中 MD5 散列用作某些表的主键,类型为 char(32)。
过去,我只使用 int 作为主键来处理数据库,但在这个项目上,我别无选择。 我想知道应该使用什么排序规则来处理 char(32) 主键(包含十六进制字符串)?
编辑:
目前,数据库的排序规则是French_CI_AS。我想知道这种主键是否合适,或者我是否应该切换到 CS 或 BIN2 排序规则以获得更好的性能?
如果您在设置过程中没有更改排序规则,请根据此 Microsoft Article "When SQL Server Setup detects that the computer is running the U.S. English system locale, Setup automatically selects the Dictionary order, case-insensitive, for use with 1252 character set SQL Server 2008 collation ..."
排序规则有多种排序方式:
- 二进制 (BIN): 根据为每个字符定义的位模式对 SQL 服务器表中的数据进行排序和比较。二进制排序顺序区分大小写和重音。二进制也是最快的排序顺序
- Binary-Point (BIN2): 根据 Unicode 数据的 Unicode 代码点对 SQL 服务器表中的数据进行排序和比较。对于非 Unicode 数据,二进制代码点将使用与二进制排序相同的比较
- Case Sensitive (CS):区分大小写字母。如果选中,小写字母排在大写字母之前。
- 重音敏感 (AS): 区分重音字符和非重音字符。例如,'a' 不等于'ấ'。
- 假名敏感 (KS): 区分两种日语假名字符:平假名和片假名。
- 宽度敏感 (WS): 区分单字节字符和表示为双字节字符的相同字符。
并且十六进制值不区分大小写,也不区分宽度、假名。正如您在评论中提供的那样,默认排序规则是 French_CI_AS
(这意味着法语 - 不区分大小写 - 区分重音)所以它不区分大小写(这很好)并且它对重音敏感(十六进制不包含重音字符所以此功能不是必需的,但如果选择它不会影响任何东西)。
所以 French_CI_AS
归类对你的情况很有用
参考资料
旁注:完全不建议选择哈希码作为主键!!最好选择一个整数作为主键