SQL Server 案例/排序规则问题

Posted

技术标签:

【中文标题】SQL Server 案例/排序规则问题【英文标题】:SQL Server case/collation issue 【发布时间】:2011-11-04 16:11:57 【问题描述】:

我今天在客户数据库中遇到了一个奇怪的情况。 SQL Server 2005,数据库排序规则不区分大小写,所以我可以使用任何大小写编写 SQL 查询,没有任何问题......除了一个。 一个特定表中的一个特定列称为“DeadZone”。 如果我这样查询: '从表名中选择死区' - 我得到一个未找到列的错误 像这样: '从 TableName 中选择 DeadZone' - 它有效。 现在是踢球者,像这样: '从 TableName 中选择 deadZone' - 它有效!

所以只有列名中的“Z”是区分大小写的! 我在同一个表中创建了一个类似的列名,其中包含一个“Z”,并且该列不区分大小写。

有什么想法吗?我确信我可以解决这个问题,可能是通过删除并重新添加该列,但最好深入到这一列的底部。 顺便说一句,该数据库位于匈牙利的 PC 上,那么是否有可能是某些匈牙利语特有的字符问题导致了这种情况?记住另一个带有“Z”的列名没有同样的问题。

-格雷姆

【问题讨论】:

【参考方案1】:

确切的排序规则是什么? Hungarian does have a special Dz letter,可能与 D 的整理方式不同 - 所以你的问题实际上可能是 d,而不是 z。

Deadzone is [D][e][a][dz][o][n][e]
DeadZone is [D][e][a][d][Z][o][n][e]
deadZone is [d][e][a][d][Z][o][n][e]

如果可以的话,我会投票给你 +1000 分,因为我本月见过最奇怪的事情。

查看与 LY 相关的问题:http://www.sqlservercentral.com/Forums/Topic19439-9-1.aspx

而且我不认为删除并重新添加您的专栏会有所帮助。如果您要使用匈牙利数据库排序规则,您应该只使用真正的匈牙利列名!

【讨论】:

我认为您可能会在那里找到一些东西,我想我的下一步是尝试创建另一个包含“dZ”的列,看看会发生什么。非常感谢您不厌其烦地为我解答。 @Graeme 另外 DZ 应该与 dz 相同,并且 dZ 和 Dz 可能相同。凉爽的?不是!

以上是关于SQL Server 案例/排序规则问题的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 排序规则的影响

sql server排序规则冲突

SQL Server转换数据库的排序规则

Sql Server - 使用排序规则

全库修改SQL Server现有排序规则

SQL Server 中索引的排序规则