我有一个数据库,多年来我在其中插入了数十万个城市值。有关某些上下文,请参阅我的另一篇文章:在 SQL Server 中存储特殊字符(德语、法语、西班牙语)会导致奇怪的字符串。我的数据库排序规则到现在为止SQL_Latin1_General_CP1_CI_AS
。
虽然正确添加了新值,但我现在在我的数据库中遇到了各种历史上错误插入的值。
以下是我看到的值与我想要的值:
Value in my database Actual desired value
KrakĂłw Kraków
Strzelce KrajeĹskie Strzelce Krajeńskie
SÄpĂłlno KrajeĹskie Sępólno Krajeńskie
也添加图像,因为我的数据库中的字符没有在 StackOverflow 上通过这里:
两个问题:
- 我上面的错误值确实像我怀疑的那样是 ascii 特殊字符吗?(我也在这里检查过)
- 执行查找/替换的命令是什么,以便我可以用 替换
ĹIND
现有值的一部分ń
?例如REPLACE(name,'Ä','ó')
要存储不在 SQL_Latin1_General_CP1_CI_AS 中的字符,您需要使用 NVARCHAR 或 UTF-8 VARCHAR 列。并且没有 100% 自动化的方法来修复您的数据,因为 Unicode 字符和 SQL_Latin1_General_CP1_CI_AS 字符之间没有 1-1 映射。当然,您可以将
N'Ä'
,替换为N'ó'
,但可能还有其他源字符被映射到N'Ä'
或N'Ä'
可能合法地出现在您的数据中。并记住始终使用 Unicode 文字
REPLACE(name,N'Ä',N'ó')
。否则,您的文字 'ó' 将被转换为数据库排序规则中的单字节字符。这只是工作;在进行全局替换之前,您只需要验证该替换不会破坏其他值,并且对于某些值,您可能需要逐行更改它们。