Mysql

使用 Workbench 從 MSSQL 遷移到 MySQL 時出現“不正確的字元串值”

  • January 10, 2018

我的任務是將我們的 MSSQL 數據庫遷移到 MySQL 數據庫中。因此,我使用的是最新版本的 MySQL Workbench 和 FreeTDS Driver。

在遷移過程中,我總是遇到這樣的錯誤:

ERROR: `dbo`.`emails_text`:Inserting Data: Incorrect string value: '\xA0</td>...' for column 'description' at row 1
ERROR: `dbo`.`prospect_lists`:Inserting Data: Incorrect string value: '\xFCrs MB...' for column 'description' at row 4
ERROR: `dbo`.`campaigns`:Inserting Data: Incorrect string value: '\xFChrung...' for column 'name' at row 24

我認為 utf8 是麻煩製造者,但到目前為止我找不到任何解決我的問題的方法。

我必須執行以下操作:

在源配置(ODBC FreeTDS)中,選項卡“高級”,我設置:

TDS_VERSION=7.2;ClientCharset=UTF-8

並檢查“驅動程序將 Unicode 數據發送為 UTF-8”。(有關更多資訊,請訪問 http://www.freetds.org/userguide/odbcconnattr.htm

然後,在目標配置中,選項卡“高級”,在文本框“其他”中,我添加了以下新行:(根據需要更改它,始終為 utf8* )

preInit=SET default_storage_engine=MYISAM,character_set_connection=utf8mb4,collation_connection=utf8mb4_spanish_ci,collation_server=utf8mb4_spanish_ci,character_set_server=utf8mb4

(有關更多資訊,請參閱: https ://dev.mysql.com/doc/refman/5.7/en/server-options.html https://dev.mysql.com/doc/refman/5.7/en/server-system -variables.html https://dev.mysql.com/doc/connector-cpp/en/connector-cpp-connect-options.html )

最後在數據複製步驟中,在選項組中選中“驅動程序發送已編碼為 UTF-8 的數據”。

其中哪一個看起來對 \xFC 是正確的?

            armscii8   2  1 'Ֆ'
cp1250, cp1256, cp1257, dec8, latin1, latin2, latin5, latin7   2  1 'ü'
              cp1251   2  1 'ь'
               cp850   2  1 '³'
               cp852   2  1 'Ř'
               greek   2  1 'ό'
        koi8r, koi8u   2  1 'Э'
               macce   2  1 'Ł'
            macroman   2  1 '¸'
      cp866, keybcs2   3  1 'ⁿ'

如果它們都沒有,那麼 MSSQL 正在生成未知垃圾。

\A0在許多字元集中是“硬空白”。一些例外:

cp850, cp852, keybcs2   2  1 'á'
               cp866   2  1 'а'
        koi8r, koi8u   3  1 '═'
     macce, macroman   3  1 '†'

您可以通過將有問題的列聲明為CHARACTER SET latin1並與垃圾一起生活,直到弄清楚該做什麼來繼續前進。

你有更多壞角色的例子嗎?也許會出現一種模式。

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