【发布时间】:2015-05-12 09:47:42
【问题描述】:
我在 sql server 2012 中有一个表,其中一列是 nvarchar。它包含罗马尼亚语字符。我们注意到只有部分字母 'Ș' 根本不显示在报告中,所以我发现这取决于键盘设置。
罗马尼亚语有两种不同的键盘设置 - 标准和传统。字母 'Ș' - 从 Rom(标准)键盘插入的 ASCII 代码为 63,从 Legacy 为 170。
带有 CHAR(170) 的字母 'Ş' - 显示在报告中,但 CHAR(63) - 不显示 - 即使它是同一个字母(应该是)。
如果我可以将 char(63) 替换为 char(170) 会很简单,但是我无法检测到字符为 63 的行。下一个选择不会返回行:
select * from table1 where columnname like '%'+CHAR(63)+'%'
即使我执行select ASCII(SUBSTRING(columnname , 1, 1)),它也会返回“63”。
即使select charindex(char(63), columnname) - 返回我 0
我也尝试过整理:
select * from table1 where columnname COLLATE Latin1_general_CI_AI like N'%s%'
它没有帮助 - 它只返回带有 's' 和 char(170) 的行。
请帮我找出这些带有错误'Ş'的行
【问题讨论】:
-
我认为 CHAR(63) 具有误导性,因为它代表 sql server 无法显示的字符:stackoverflow.com/questions/6441208/…
-
是的,刚刚发现 char(ASCII(SUBSTRING(columnname, 1, 1))) 返回我 '?'谢谢你的链接
标签: sql sql-server tsql sql-server-2012