sql server 排序规则是不是意味着列名必须是正确的大小写?以及如何处理

Posted

技术标签:

【中文标题】sql server 排序规则是不是意味着列名必须是正确的大小写?以及如何处理【英文标题】:Does sqlserver collation mean column names must be correct case? And how to deal with thatsql server 排序规则是否意味着列名必须是正确的大小写?以及如何处理 【发布时间】:2010-10-04 13:00:11 【问题描述】:

在 SQL Server(2000 或 2005)中,是否可以设置数据库或服务器排序规则,以便标识符名称(表、列等)需要使用正确的大小写?如果是这样,所有区分大小写的排序规则都是如此,还是单独设置? (我一直认为区分大小写适用于数据,而不是对象名称)。

如果应用程序存储的过程和查询不是以一致的大小写编写的,这可能会破坏应用程序吗?有没有办法处理这个问题而不必确保所有查询都使用正确的大小写,例如设置数据库连接的排序规则?

我从现有应用程序的角度来看待这个问题,该应用程序中可能包含不一致的大小写 sql 代码,并且我希望能够针对具有不同排序规则的数据库运行它。我需要哪些设置或哪些数据库/服务器排序规则不能与应用程序一起使用?

【问题讨论】:

【参考方案1】:

您可以为每个对象设置排序规则,也可以为数据库和服务器设置默认值。

如何处理?您需要在这里执行标准。你可以很容易地与不同的人用不同的大小写纠缠在一起。

排序规则也适用于数据,因此 "bob" != "Bob"

【讨论】:

【参考方案2】:

排序规则决定了您的查询是否不区分大小写。因此,确保您的架构适用于多种环境的唯一方法是让您的查询区分大小写。如果您的查询不一致,那么您的排序规则必须不区分大小写,否则它将不起作用。

http://msdn.microsoft.com/en-us/library/aa174903(SQL.80).aspx

需要注意的一点是,一旦您使用特定排序规则设置了 SQL Server 环境,就无法在不创建新 SQL Server 实例的情况下对其进行更改。因此,不区分大小写通常是要走的路。然后努力使您的查询保持一致。

我相信,一旦设置了排序规则,它就会同时应用于数据和元数据。

【讨论】:

【参考方案3】:

排序规则在 SQL Server 的早期版本中设置,但在 2005 年及以后版本中,您可以在创建对象时按对象更改它。

【讨论】:

虽然这是真的,但仍有一些与 TEMPDB 获取服务器排序规则相关的问题。因此,如果服务器是,任何使用 tempdb 的存储过程都将区分大小写,即使您正在执行存储过程的数据库是不区分大小写的。【参考方案4】:

数据库默认排序规则确定在查询中是否以区分大小写的方式处理数据库中的对象 - 这适用于所有对象名称:表、列等。

如果您的应用程序代码来自不区分大小写的排序规则数据库,如果对象被错误引用,它可能无法在区分大小写的排序规则数据库上运行(当您尝试运行语句或创建存储过程时会收到一条消息,或者在存储过程架构中,除非你有大量的动态 SQL,否则你会很快捕捉到所有这些)。

请记住,即使您的代码运行,也可以使用与数据库不同的排序规则设置各个列,因此使用不同的排序规则,您的代码总是有可能出现意外行为(例如,GROUP BY 的行为不同)。

【讨论】:

以上是关于sql server 排序规则是不是意味着列名必须是正确的大小写?以及如何处理的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 不区分大小写的排序规则

SQL Server 2005 排序规则问题

sqlserver 排序规则的问题

sqlserver支持的字符集都有哪些

在 sql server 2012 中为西班牙语选择了啥排序规则?

修改搜索以使其在 SQL Server 中不区分重音