历史上,SQL Server 使用单独的数据类型 NVarchar 来存储使用 UTF-16 编码的 Unicode。对于具有行和页压缩的表,SQL Server 使用Unicode Compression,以便使用单个字节存储常用字符。因此,目前您会将列转换为 Nvarchar,并可能在较大的表上启用行压缩。 Row Compression 价格低廉,只需对所有数据类型使用可变宽度存储即可。
SQL Server 2019 is adding UTF-8 Varchar 类型的编码,主要是为了使这些类型的转换更简单。这还没有推广到 Azure SQL 数据库,但我希望这会在 SQL Server 2019 发布之前发生。
因此,您应该简单地选择一个兼容的数据库排序规则,以便对字符串进行排序和比较,类似于 MySQL 排序规则。快速查看文档表明 SQL_Latin1_General_CP1_CI_AI 可能是正确的排序规则,因为它不区分大小写和重音。当然,您可能更喜欢区分重音的排序规则,这是 SQL Server 中的默认设置。
EG
CREATE DATABASE MyDatabase
COLLATE SQL_Latin1_General_CP1_CI_AI
(
EDITION = 'Standard',
SERVICE_OBJECTIVE = 'S1'
);
然后,对于任何将存储无法使用该排序规则存储在 varchar 列中的字符的列,将数据类型更改为 NVarchar。
这里是可以使用该排序规则存储在 Varchar(N) 中的可打印字符列表。
!,",#,$,%,&;,',(,),*,+,,,-,.,/,0,1,2,3,4,5,6,7,8,9,:,;,<;,=,>;,?,@,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,[,\,],^,_,`,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,{,|,},~,€,‚,ƒ,„,…,†,‡,ˆ,‰,Š,‹,Œ,Ž,,,‘,’,“,”,•,–,—,˜,™,š,›,œ,ž,Ÿ, ,¡,¢,£,¤,¥,¦,§,¨,©,ª,«,¬,,®,¯,°,±,²,³,´,µ,¶,·,¸,¹,º,»,¼,½,¾,¿,À,Á,Â,Ã,Ä,Å,Æ,Ç,È,É,Ê,Ë,Ì,Í,Î,Ï,Ð,Ñ,Ò,Ó,Ô,Õ,Ö,×,Ø,Ù,Ú,Û,Ü,Ý,Þ,ß,à,á,â,ã,ä,å,æ,ç,è,é,ê,ë,ì,í,î,ï,ð,ñ,ò,ó,ô,õ,ö,÷,ø,ù,ú,û,ü,ý,þ,ÿ
如果您主要使用不同的语言,则可以选择具有不同比较和排序规则的不同排序规则,并且可以在 Varchar 列中存储不同的 Unicode 字符子集。