目前,我的列数据类型是Server表中的varchar。
我想在我的专栏中同时存储中英文字符。
使用排序规则需要遵循哪些步骤,还是必须将数据类型更改为NVARCHAR并以N'作为unicode进行插入?
如果我要用校对,我应该用什么校对。
请帮我这个忙
发布于 2016-08-23 12:43:32
你混合了两个概念:
VARCHAR将数据存储在8位的块中。总共256个不同的值不足以解决每个字符的问题。也是1字节存储的UTF-8使用了一个技巧:基本字符是一个块.但是有时有一个特殊的块告诉引擎,这个字符必须被解释为一个两个字节的字符。如果你接触到不同字符集的语言,你会发现甚至需要三到四个字节来编码一个字符的字符。
VARCHAR使用了另一个技巧:排序规则添加代码页来解释值。在大多数情况下,下半部分或多或少是“纯拉丁语”,而上半部分则为特定语言添加了特殊字符。特殊字符的计数是非常有限的!这意味着,VARCHAR中相同的值将通过不同的排序得到不同的结果。
NVARCHAR将每个字符存储为UCS-2 (这与UTF-16-2字节存储几乎相同).这允许对所有字符进行一次编码,不需要任何技巧(嗯,有一些表情符号.)。
排序规则的主要用途用于排序和字符串比较。它用于处理WHERE、JOIN或索引中的字符串值以及任何类型的排序。
如上所述,它将添加一个代码页来解释值,这在1字节世界中非常重要。
Server有一个默认的排序规则,用于新数据库和-非常重要!-在临时表中。
允许在数据库级别上定义不同的默认排序规则,但如果对排序规则不相同的临时表运行查询,则可能会导致严重问题。
您也可以在列级别上定义排序规则。
并且允许您为每个列定义排序规则,即使在语句中也是如此。这是最高级别的控制,但意味着大量的打字和非常难读的代码.
对你最重要:
如果您想在一列中存储英文和中文,必须使用NVARCHAR。没有适合一切的校对,这是你必须尝试的。mus在任何字符串文本(N'your text')中添加一个前导N。
您可以使用适当的配置将字符串存储在侧表中,并将其绑定到查询中.
更新:正确配置
对于英文和中文字符串,您应该使用不同的列。甚至每种语言都有一个单独的边桌..。这允许您为每一列/语言分别设置最佳排序规则。它使得在多语言环境中添加新的语言变得很容易。
发布于 2016-08-23 11:55:34
如果你想储存远东字母(中文、日文、韩文等)或者西里尔语,或者阿拉伯语或者希伯来语,是的,你必须使用 nvarchar。
如果在包含Unicode字符的SQL脚本中定义了字符串文本,则必须使用 N'....'字符串前缀。
https://stackoverflow.com/questions/39100264
复制相似问题