【发布时间】:2013-09-19 00:27:31
【问题描述】:
我们有两个数据库,一个是具有 COLLATION - SQL_Latin1_General_CP1_CI_AS 的旧数据库,一个具有 COLLATION - Latin1_General_CI_AI 的新数据库(可能是默认数据库)。
两个数据库中都有一个简单的 Table1(ID (int), code(nvarchar(50)))。我想做的是比较两个表的数据并找到丢失或额外的记录。
Sample data in old table has code like : 'Code1 '
Sample data in new table has code like : 'Code1 '
我需要做的是比较两个数据(来自“名称”列)。我无法从旧表中删除数据 -
示例:
SELECT LTRIM(RTRIM([Name])) from [OLDDB].dbo.Table1
returns 'Code1 ' -- NOT as expected (probably due to mis-match in charset
SELECT LTRIM(RTRIM([Name])) from [NEWDB].dbo.Table1
'Code1' -- as expected
我希望这是有道理的。此外,即使我在列级别更改了 COLLATION,我仍然无法获得 ltrim / rtrim 工作!
谢谢。
【问题讨论】:
-
我刚刚使用这些精确的排序规则创建了两个数据库,尝试了代码并没有遇到这种行为。 OLDDB 中的列数据是否可能包含其他类型的空格,例如 RTRIM 不修剪的 CHAR(160)?用
SELECT Name FROM OLDDB.dbo.Table1 WHERE CHARINDEX(CHAR(160), Name) <> 0检查它 -
谢谢。是的,它似乎是 char(160),我检查了上面的查询并返回非零。无论如何要以此为基础推导出 LTRIM RTRIM?我相信在每个列级别更改 COLLATION 是一个漫长的过程!
标签: sql-server collation trim