我有已导入我们的 SQL Server 2008 数据库(使用排序规则)的内容,这些内容在列SQL_Latin1_General_CP1_CI_AS
中被 UNICODE NULLS 污染。nvarchar(128)
其影响是当我们的 java 库尝试导出 PDF 报告中的内容和其他此类操作时,它会炸毁我们的 Java 库。
我正在尝试查找和修改各种表和列中的值。我们的一些员工告诉我,违规值看起来像'u s e r n a m e'
而不是'username'
.
在试图找到这些有问题的 UNICODE NULLS 时,我运行了以下 SQL:
SELECT name
FROM users
WHERE name LIKE '%[^ -~]%' COLLATE Latin1_General_BIN
返回的是以下集合:
M
M
M
N
S
S
S
S
ÿþA
我认为这些单字母值可能后跟 UNICODE NULLS,但我不确定。最后一个看起来也很可疑。
是否有某种使用方法CONVERT
和十六进制值——0x00 来定位字符串中的 UNICODE NULLS nvarchar
?
编辑#1:
select name, CAST(RIGHT(name,1) AS varbinary(128)) AS RIGHTER_1,
from users
where id=1
returns:
B 0x4200
所以,那个字母“B”有点好笑。这里确实有 UNICODE NULLS,并且这些库的架构不是为了处理 UNICODE。它们使用 LATIN UTF8 字符坚如磐石。