SQL中的Unicode数据类型

Léo*_*ier 4 sql-server unicode sqldatatypes

我是Microsoft SQL的新手.我打算在Microsoft SQL服务器中存储文本,并且会有特殊的国际字符.是否存在特定于Unicode的"数据类型"或者我更好地使用对unicode编号的引用来编码我的文本(即\ u0056)

Bri*_*dge 13

使用Nvarchar/ Nchar(MSDN链接).曾经有过一种Ntext数据类型,但现在它已被弃用了Nvarchar.

这些列占用的空间是非unicode对应物(charvarchar)的两倍.

然后当"手动"插入它们时,用于N指示它的unicode文本:

INSERT INTO MyTable(SomeNvarcharColumn) 
VALUES (N'français')
Run Code Online (Sandbox Code Playgroud)


Cad*_*oux 6

当你说特殊的国际角色时,你的意思是什么?如果特殊意味着它们不常见且只是偶然的,那么在具有大量行或大量索引的表的情况下,nvarchar的开销可能没有意义.

我在适当时使用Unicode,但在适当的时候理解它很重要.

如果您将数据与不同的隐含代码页(日语和中文在同一数据库中)混合在一起,或者您只是想要前瞻性的国际化和本地化,那么您希望该列为Unicode并使用nvarchar数据类型,这非常好.Unicode不会神奇地为您解决所有排序问题.

如果您知道您将始终存储主要是ASCII但偶尔存储一些外来字符,只需将您的UTF-8数据或HTML编码数据存储在varchar中.如果您的数据全部是日语和代码页932(或任何其他单个代码页),您仍然可以在varchar中存储双字节字符,它们仍占用两个字节.我的观点是,当您已经进行DBCS整理时,国际字符不再是"特殊".在查询和其他数据流中处理这样的列时,不仅仅是数据存储,还有任何索引以及工作集.

并且不要制定一个全面的规则,即所有字符数据都应该是nvarchar - 这对于许多代码或标识符的列来说都是浪费.

如果您有专栏,请完成相同的问题:

什么是数据类型?

范围是多少?

是否允许NULL?

尺寸的限制是多少?

我现在应该采用什么约束来阻止从一开始就输入不良数据?