我刚收到一个(MSSQL)数据库,遗憾的是数据已损坏。 在一些数据集中,德语特殊字符(ä/ü/ö)被替换为 符号(Unicode:\ uFFFD)。
这不是整理或使用各种编码或任何东西(我已经检查过)的问题,而是提供原始数据的人的错误,因为我很确定这些符号是“硬编码”的数据意味着它们“总是”存在,并且可能是由数据提供者的失败迁移(或类似的东西)而存在的。
由于在没有这些错误的情况下无法正确转储,我目前正在寻找仅选择受影响的数据集的可能性。我已经尝试了一个[...] WHERE LIKE'%\ uFFFD%'语句(希望DB在内部将这些符号解码为unicode代码),但无济于事。 [...] WHERE LIKE'% %'部分工作,因为它显示所有受影响的列,但也显示包含法线的所有数据集?字符(这使得这个方法对我来说不可用,因为输出太大了。)
有没有人知道是否有可能专门选择包含 的数据集?
祝你好运, daZza
答案 0 :(得分:1)
结果取决于您的整理设置。我能够让它与几个不同的工作。我认为最通用的是:
SELECT *
FROM (VALUES (N'A�A'), (N'A?A'), (N'AAA'), (N'�A'), (N'A�'), (N'�')) t (c)
WHERE CHARINDEX(N'�' COLLATE Latin1_General_BIN, C) > 0;
或者
SELECT *
FROM (VALUES (N'A�A'), (N'A?A'), (N'AAA'), (N'�A'), (N'A�'), (N'�')) t (c)
WHERE C LIKE N'%�%' COLLATE Latin1_General_BIN;
使用LIKE时,它似乎只适用于使用二进制排序的排序规则(尽管我没有尝试过所有排序规则!)。您可以使用以下方式获取这些:
SELECT name, description
FROM fn_helpcollations()