首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server :何时使用排序规则和nvarchar

问Server :何时使用排序规则和nvarchar
EN

Stack Overflow用户
提问于 2016-08-23 11:44:16
回答 2查看 1.6K关注 0票数 1

目前,我的列数据类型是Server表中的varchar。

我想在我的专栏中同时存储中英文字符。

使用排序规则需要遵循哪些步骤,还是必须将数据类型更改为NVARCHAR并以N'作为unicode进行插入?

如果我要用校对,我应该用什么校对。

请帮我这个忙

EN

回答 2

Stack Overflow用户

发布于 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。

您可以使用适当的配置将字符串存储在侧表中,并将其绑定到查询中.

更新:正确配置

对于英文和中文字符串,您应该使用不同的列。甚至每种语言都有一个单独的边桌..。这允许您为每一列/语言分别设置最佳排序规则。它使得在多语言环境中添加新的语言变得很容易。

票数 4
EN

Stack Overflow用户

发布于 2016-08-23 11:55:34

如果你想储存远东字母(中文、日文、韩文等)或者西里尔语,或者阿拉伯语或者希伯来语,是的,你必须使用 nvarchar。

如果在包含Unicode字符的SQL脚本中定义了字符串文本,则必须使用 N'....'字符串前缀。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39100264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档