SQL Server排序规则

8
我正在阅读的书上提到,SQL Server支持两种字符数据类型:常规和Unicode。 常规数据类型包括CHAR和VARCHAR,Unicode数据类型包括NCHAR和NVARCHAR。 区别在于,常规字符每个字符使用一个字节的存储空间,而Unicode字符每个字符需要两个字节。 对于每个字符只使用一个字节的情况,选择列的常规字符类型会限制您只能使用英语以外的一种语言,因为单个字节只能表示256(2 ^ 8)个不同字符。
我得知,如果我使用Varchar,那么我只能使用一种语言(例如印度语),并且与英语一起使用。但是,当我运行这个时……
Create Table NameTable
(
    NameColumn varchar(MAX) COLLATE Indic_General_90_CI_AS_KS
)

我看到了一个错误提示:“Collation 'Indic_General_90_CI_AS_KS' 仅支持 Unicode 数据类型,不能应用于 char、varchar 或 text 数据类型。”

那么我是在哪里误解了作者呢?
谢谢。

3个回答

3

在你的SQL语句中使用这个,考虑到"content"是一个包含你想要插入的阿拉伯字符串的变量:

update Table set contents = convert(text, N'" + content + "' collate Arabic_CI_AS)

它运行良好。


3
您可以在此处找到一份排序规则列表,以及编码类型
某些排序规则仅适用于1字节编码--127位用于普通ASCII,128可用于其他字符--印地文可能不适用于128个字符,因此1字节排序规则不适用于它。
您将需要使用nvarchar(或其他带有“n”前缀的字符类型)。
-- 编辑 --
French_CI_AS作为非英语示例
排序规则的其中一个功能是对字符进行特定于语言和区域设置的排序。因此,法语!=拉丁语。
另一个示例是Arabic_CI_AS
这是一种具有阿拉伯字母的1字节编码。

你能给我一个1字节排序规则的名称,以便我可以测试它吗? - Akshay J
我想了解除英语以外的任何内容。 - Akshay J
添加了法语作为非英语1字节排序规则。同时添加了阿拉伯语,以形成对比。 - Hassan Syed
谢谢,我尝试了阿拉伯语。Insert Into 能够插入阿拉伯字符串“مرحبا كيف حالك”,但是当我在 SSMS 中打开表时,它显示为“?”。为什么会这样? - Akshay J
你的系统默认排序规则可能是latin1。在系统中,你只能激活一种单字节排序规则。 - Hassan Syed

1

你可以使用这个

name = N'مرحبا كيف حالك'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接