【问题标题】:Changing SQL Server collation to case insensitive from case sensitive?将 SQL Server 排序规则从区分大小写更改为不区分大小写?
【发布时间】:2011-03-18 19:23:11
【问题描述】:

我最近安装了 SQL Server 2008,并选择了排序规则区分大小写。我想让整个实例(而不是该实例中的数据库)不区分大小写。如果我更改排序规则,它会影响任何现有数据库吗?如果是,以什么方式?

【问题讨论】:

    标签: sql-server sql-server-2008 collation


    【解决方案1】:

    您基本上需要再次运行安装以使用新排序规则重建master 数据库。您不能以任何其他方式更改整个服务器的排序规则。

    见:

    更新:如果要更改数据库的排序规则,可以使用 T-SQL 的这个 sn-p 获取当前排序规则:

    SELECT name, collation_name 
    FROM sys.databases
    WHERE name = 'test2'   -- put your database name here
    

    这将产生一个类似的值:

    Latin1_General_CI_AS
    

    _CI 表示“不区分大小写” - 如果您想区分大小写,请使用 _CS 代替:

    Latin1_General_CS_AS
    

    所以你的 T-SQL 命令是:

    ALTER DATABASE test2 -- put your database name here
       COLLATE Latin1_General_CS_AS   -- replace with whatever collation you need
    

    您可以使用以下方法获取服务器上所有可用排序规则的列表:

    SELECT * FROM ::fn_helpcollations()
    

    您可以使用以下命令查看服务器的当前排序规则:

    SELECT SERVERPROPERTY ('Collation')
    

    【讨论】:

    • 好的,感谢您提供的信息。现在至少我想尝试更改数据库的排序规则以使其不区分大小写。我发现这个'ALTER DATABASE DEV_DB COLLATE [不区分大小写的键]是一样的。但不确定用于不区分大小写的值。任何帮助都是可观的!
    【解决方案2】:

    您可以这样做,但更改会影响插入数据库的新数据。从长远来看,请按照上面的建议进行操作。

    还有一些技巧可以覆盖排序规则,例如存储过程或函数的参数、别名数据类型以及为变量分配数据库的默认排序规则。要更改别名类型的排序规则,您必须删除别名并重新创建它。

    您可以使用 COLLATE 子句覆盖文字字符串的默认排序规则。如果您不指定排序规则,则会为文字分配数据库默认排序规则。您可以使用 DATABASEPROPERTYEX 来查找数据库的当前排序规则。

    您可以通过在 SELECT 语句的 ORDER BY 子句中指定排序规则来覆盖服务器、数据库或列排序规则。

    【讨论】:

      猜你喜欢
      • 2014-05-10
      • 2011-05-11
      • 2019-06-19
      • 1970-01-01
      • 1970-01-01
      • 2015-07-07
      • 2011-06-01
      • 1970-01-01
      • 2012-01-12
      相关资源
      最近更新 更多