Sql-Server-2019

用 MSSQL 2019 數據庫中的實際字元替換格式錯誤的特殊字元

  • August 18, 2022

我有一個數據庫,多年來我在其中插入了數十萬個城市值。有關某些上下文,請參閱我的另一篇文章:在 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 上通過這裡:

在此處輸入圖像描述

兩個問題:

  1. 我上面的錯誤值確實像我懷疑的那樣是 ascii 特殊字元嗎?(我也在這裡檢查過
  2. 執行查找/替換的命令是什麼,以便我可以用 替換Ĺ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'ó')。否則,您的文字 ‘ó’ 將被轉換為數據庫排序規則中的單字節字元。

這只是工作;在進行全域替換之前,您只需要驗證該替換不會破壞其他值,並且對於某些值,您可能需要逐行更改它們。

引用自:https://dba.stackexchange.com/questions/315747