首页 > 解决方案 > Azure SQL 区分重音的对象名称

问题描述

我们有一个本地数据库,我们希望使用数据迁移助手将其上传到 Azure。我们的数据库使用排序规则 SQL_Latin1_General_CP1_CI_AI。我们在某些表名和列名中使用重音符号。在 SSMS 中编写查询时,如果我们在表名中省略重音符号,它仍然有效,但在 Azure 上会出错。有没有办法将 Azure SQL 配置为对对象名称不区分重音,同时对文本数据仍然不区分重音?

例如,如果我有一个名为 [Paramètres] 的表,然后我执行以下语句

SELECT * 
FROM [Parametres]

它适用于 SSMS,但不适用于 Azure。我收到“无效的对象名称”错误

标签: azure-sql-database

解决方案


重音敏感/不敏感取决于数据库排序规则。SQL Server 中的排序规则为您的数据提供排序规则、区分大小写和区分重音的属性。

请参考:<a href="https://docs.microsoft.com/en-us/sql/relational-databases/collat​​ions/collat​​ion-and-unicode-support?view=sql-server-ver15" rel="nofollow noreferrer">排序规则和 Unicode 支持。</p>

您可以运行以下查询检查排序规则是否区分重音或不敏感:

IF 'a' = 'á' COLLATE SQL_Latin1_General_CP1_CI_AI
SELECT 'Values are the same'
ELSE
SELECT 'Values are different'

AS对口音敏感,对AI口音不敏感。例如,您的本地数据库排序规则SQL_Latin1_General_CP1_CI_AI对口音不敏感。

请运行以下查询以检查您的 Azure SQL 数据库排序规则:

SELECT CONVERT (varchar, SERVERPROPERTY('collation')) AS 'Server Collation';

创建 Azure SQL 数据库后,我们无法更改它的排序规则。因此,无法将 Azure SQL 配置为不区分重音。

建议不要 DMA 将您的本地数据库迁移到现有的 Azure SQL 数据库。请使用导入 DACPAC 或 SSMS:将数据库部署到 Azure SQL 数据库: 在此处输入图像描述


推荐阅读