无法找到字母“s”或罗马尼亚(标准)键盘插入“S”

我有一个表在SQL Server 2012,其中一列类型为nvarchar。 它包含罗马尼亚的字符。 我们注意到,只有一些英文字母“S”的在所有报告不显示的,所以我发现,它依赖的键盘设置。

有罗马尼亚两个不同的键盘设置 - 标准和传统。 字母“s” - 从ROM(标准)键盘插入有ASCII码63,从遗产是170。

字母“S”用CHAR(170) - 显示在报告中,但CHAR(63) - 不 - 即使是同样的信(应该是)。

这将是简单的,如果我能取代CHAR(170)CHAR(63),但我不能检测与性格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)只返回行。

请帮我看看这行有错误的“S”

--------------解决方案-------------

所以从我的意见首先, CHAR(63)是一种误导,因为它代表的SQL Server是无法显示的字符:

无法以SQL查询来代替CHAR(63)

这个问题可能是到你选择的排序规则,因为如果我运行这个示例中,我得到一个包含特殊字符2行:

CREATE TABLE #temp ( val NVARCHAR(50) )

INSERT INTO #temp
( val )
VALUES ( N'Șome val 1' ),
( N'some val 2' ),
( N'șome other val 3' )

SELECT *
FROM #temp
WHERE val COLLATE Latin1_General_BIN LIKE N'%ș%'
OR val COLLATE Latin1_General_BIN LIKE N'%Ș%'

DROP TABLE #temp

产量

val
=================
Șome val 1
șome other val 3

指定的归类是:Latin1_General_BIN,在这篇文章中发现:

只有更换字符串的开头匹配

WHERE columnname LIKE N'%'+NCHAR(536)+'%'

这会帮助你发现即使是作为插入未知字符如下面的第一个插入的字符。

DECLARE @Table TABLE (text nvarchar(50))
INSERT INTO @Table(text)
SELECT 'Ș'
UNION ALL
SELECT N'Ș'

SELECT UNICODE(text) UNICODE
FROM @Table

结果:

UNICODE
63
536

'S'是NCHAR(536)和'S'是NCHAR(537)。 如果你然后做:

SELECT * FROM @Table WHERE text LIKE N'%'+NCHAR(536)+'%'

结果:

text
?
Ș

分类:SQL 时间:2015-03-15 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.879 (s). 10 q(s)