Sql-Server-2019
用 MSSQL 2019 數據庫中的實際字元替換格式錯誤的特殊字元
我有一個數據庫,多年來我在其中插入了數十萬個城市值。有關某些上下文,請參閱我的另一篇文章:在 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'ó')
。否則,您的文字 ‘ó’ 將被轉換為數據庫排序規則中的單字節字元。這只是工作;在進行全域替換之前,您只需要驗證該替換不會破壞其他值,並且對於某些值,您可能需要逐行更改它們。