2010-02-22 103 views
8

这本书我读说SQL Server排序规则

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 
) 

它显示了我的错误“归类‘Indic_General_90_CI_AS_KS’支持仅Unicode数据类型,并且不能适用于CHAR,VARCHAR或文本数据类型。”

那么我在哪里误解了作者?
感谢

回答

3

你可以找到归类here的列表,编码类型


某些排序规则将只适用于1字节编码沿 - 127位被用于普通的ASCII和128可用于其他字符 - 印地语可能不适合128个字符,因此1字节的排序规则不适用于它。你将不得不使用nvarchar(或其他'n'前缀字符类型)。

- 编辑 -

French_CI_AS作为一个非英文的例子

的事情之一排序规则允许的语言和区域设置特定的字符排序。所以法语!=拉丁语。

又如Arabic_CI_AS

这是一个1字节的编码与阿拉伯字母。

+0

你可以命名任何1字节的排序规则,以便我可以测试它吗? – 2010-02-22 11:20:38

+0

SQL_Latin1_General_CP1_CI_AS – 2010-02-22 11:22:06

+0

我想知道除英语以外的任何其他内容 – 2010-02-22 11:27:06

1

您可以在SQL语句中使用这个

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

使用此,考虑到“内容”中包含要插入阿拉伯语字符串变量:

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

它工作正常。