azure - 如何为 Azure SQL 数据库设置 UTF-8 排序规则? UTF-8 不在支持的排序规则列表中

标签 azure azure-sql-database

我目前使用 MySQL 和 utf8mb4_unicode_ci,并且正在研究如何将数据导入到 Azure MSSQL 数据库

根据本文档;

https://azure.microsoft.com/en-us/blog/working-with-collations-in-sql-azure/

它说我只能在服务器和数据库级别使用默认的SQL_Latin1_General_CP1_CI_AS,但我可以在对象级别更改它;

The default collation for character data in SQL Azure databases is SQL_Latin1_General_CP1_CI_AS. This collation is also used across the SQL Azure infrastructure to sort and compare metadata that defines database objects. The server and database level collations are not configurable in SQL Azure. However, you can use a collation of your choice at the column and expression level. This article will show you how.

但是,当我运行时:

从 sys.fn_helpcollat​​ions() 中选择*;

在 MSSQL Server Management Studio 中,我得到了大量支持的排序规则列表;

enter image description here

但此列表中没有一个包含 UTF-8

我是 MS SQL 新手,我缺少什么?我很难相信 MS SQL 无法处理 UTF-8?

最佳答案

历史上,SQL Server 使用单独的数据类型 NVarchar存储 Unicode,使用 UTF-16 编码。对于具有行和页压缩的表,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 字符子集。

关于azure - 如何为 Azure SQL 数据库设置 UTF-8 排序规则? UTF-8 不在支持的排序规则列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53031879/

相关文章:

azure - 我是否使用 Azure 表存储或 SQL Azure 作为我们的 CQRS 读取系统?

python - 无法使用 python 从我的计算机访问 Azure SQL DB

c# - 如何比较本地文件和云文件Azure

Azure 逻辑应用 HTTP 请求条件不起作用

azure - 无法从azure应用程序连接ms sql服务器

sql-server - 是否可以将 SQL Server session 上下文与 Azure 弹性查询一起使用

azure - 使用哪种 Azure 监视服务来可视化组件之间的关系?

azure - 处理 cosmos sql 查询中 ARRAY_CONTAINS 搜索中的特殊字符

.net - Azure 应用程序网关返回随机 502 错误

azure - 是否可以在从 PowerShell 创建 Azure VM 时安装应用程序?