我的內容已導入我們的SQL Server 2008數據庫(使用排序規則SQL_Latin1_General_CP1_CI_AS
),該列表受到在nvarchar(128)
列中受UNICODE NULLS污染的數據的影響。SQL Server在nvarchar字符串中選擇unicode空字符
其影響是當他們嘗試導出PDF報告中的內容和其他此類操作時,它爆炸了我們的Java庫。
我想查找和修改各種表和列中的值。我的一些員工告訴我,這些違規值看起來像'u s e r n a m e'
而不是'username'
。
在試圖找到這些問題的UNICODE空值,我已經運行的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來找到nvarchar
字符串中的UNICODE NULLS?
編輯#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的。他們與拉丁UTF8字符堅如磐石。
Vladv--這將返回所有在表中的行:從用戶 其中名稱LIKE '%' + CHAR(0)+ '%' 選擇ID,名稱 – mrTexasFreedom