sql - SQL Server SQL_Latin1_General_CP1_CI_AS 能否安全地转换为 Latin1_General_CI_AS?

标签 sql sql-server collation

我们有一个旧数据库,其中一些(较旧的)列使用“SQL_Latin1_General_CP1_CI_AS”,最近的更改已使用“Latin1_General_CI_AS”。

这很痛苦,因为连接需要额外的 COLLATE 语句才能工作。

我想将所有内容都调整为“Latin1_General_CI_AS”。据我所知,它们或多或少是相同的排序规则,并且在此过程中我不会丢失数据......

有谁知道是这样吗?

最佳答案

这是一个更完整的答案:

https://www.olcot.co.uk/revised-difference-between-collation-sql_latin1_general_cp1_ci_as-and-latin1_general_ci_as/

这些排序规则之间的主要区别在于它们如何应用字符扩展规则。某些拉丁字符可以扩展为多个字符。在处理非 unicode 文本时,SQL_xxxx 排序规则可能会忽略这些字符扩展,但将它们应用于 unicode 文本。因此:当使用一种排序规则与另一种排序规则时,连接、排序和比较可能会返回不同的结果。

示例:

Latin1_General_CI_AS 下,这两个语句返回同一组记录,因为 ß 扩展为 ss

SELECT * FROM MyTable3 WHERE Comments = 'strasse'
SELECT * FROM MyTable3 WHERE Comments = 'straße'

使用SQL_Latin1_General_CP1_CI_AS时,上述语句返回不同的记录,因为ß被视为与ss不同的字符。

关于sql - SQL Server SQL_Latin1_General_CP1_CI_AS 能否安全地转换为 Latin1_General_CI_AS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6296936/

相关文章:

Mysql查询用于在多个条件和列上从一个表插入另一个表

sql - 如何将现有 SQL Server 登录名连接到同名的现有 SQL Server 数据库用户

c# - SQL Server 为数据库中的每个表添加一个唯一标识符

mysql - 将 MySQL 表从 Latin1 转换为 UTF8 时整理丢失的信息

mysql - 将 WordPress 站点转移到新的开发环境时 SQL 整理错误

sql - 如何从日期时间中删除时间

sql-server - Hibernate/JPA SQLServer 主键自动增量

json - 当值未命名时将 json 值检索到列中

sql-order-by - 在 SAP Hana 中使用排序规则的 ORDER_BY

sql - 从 Django 查询 postgres 数据库以列出所有具有事件图书借阅(tab2)的用户(tab1)的最佳方法?