我正在 Synapse Azure 中从事 Lakehouse 项目。我创建了一个带有排序规则 Latin1_General_100_BIN2_UTF8 的无服务器 SQL 池。 Microsoft 建议对 parquet 和 Delta 表使用此排序规则,请参阅 MS Doc Azure Synapse Analytics 中无服务器 SQL 池的最佳实践。
主数据库的排序规则默认为SQL_Latin1_General_CP1_CI_AS。
我已在 Visual Studio 2022(版本 17.8.5)中创建了一个数据库项目用于部署目的。我进行了所需的设置,例如将目标平台设置为“Azure Synapse Analytics Serverless SQL Pool”以及“数据库设置”下的排序规则“Latin1_General_100_BIN2_UTF8”。
当我运行架构比较时,我收到以下错误:
在源模型填充期间捕获意外异常:不能 解决“SQL_Latin1_General_CP1_CI_AS”之间的排序规则冲突 和 UNION 操作中的“Latin1_General_100_BIN2_UTF8”。
然后,我尝试将架构与Azure Data Studio进行比较,我得到了相同的异常。
我不想使用主数据库的默认排序规则。我不确定这是否是一个错误,因为数据库项目考虑的是主数据库而不是目标数据库的排序规则,或者我是否缺少一些其他配置。
您可以使用以下语法检查当前排序规则,以检查排序规则 Latin1_General_100_BIN2_UTF8 是否应用于您正在使用的数据库:
SELECT DATABASEPROPERTYEX('db02', 'Collation') AS Collation;
当给定“Collation”作为属性参数时,DatabasePropertyEx函数将检索指定数据库的当前排序规则设置。
要修改无服务器 SQL 池数据库的默认排序规则,您可以使用
ALTER DATABASE
语句。例如:
ALTER DATABASE db02 COLLATE Latin1_General_100_BIN2_UTF8
结果:
参考: SO 线程 如何更改 Synapse 无服务器数据库中的排序规则