【问题标题】:How to set UTF-8 collation for a Azure SQL database? UTF-8 not in supported collation list如何为 Azure SQL 数据库设置 UTF-8 排序规则? UTF-8 不在支持的排序规则列表中
【发布时间】:2018-10-29 19:52:42
【问题描述】:

我目前使用 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,但我可以在对象级别更改它;

SQL Azure 数据库中字符数据的默认排序规则是 SQL_Latin1_General_CP1_CI_AS。此排序规则还用于整个 SQL Azure 基础结构,以对定义数据库对象的元数据进行排序和比较。服务器和数据库级别的排序规则在 SQL Azure 中不可配置。但是,您可以在列和表达式级别使用您选择的排序规则。本文将向您展示如何操作。

但是,当我运行时:

SELECT * FROM sys.fn_helpcollations();

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

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

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

【问题讨论】:

    标签: azure azure-sql-database


    【解决方案1】:

    历史上,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 字符子集。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-12
    • 2021-02-16
    • 2012-09-14
    • 2011-12-08
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 2014-12-13
    相关资源
    最近更新 更多