Sql-Server

使用 MySQL Workbench 從 MSSQL 遷移到 MySQL 時出現 UTF8 問題

  • February 8, 2017

我的任務是將我們的部分數據庫從現場 MSSQL 伺服器遷移到 Amazon RDS MySQL。這將是我第一次嘗試進行數據庫遷移,因此我正在使用 MySQL Workbench 從我們的 MSSQL 伺服器到本地安裝的 MySQL 實例進行試執行。本地安裝 MySQL Workbench 6.3 版。MySQL 伺服器版本 5.7

  • 產生錯誤:Inserting Data: Incorrect string value: '\xA0\xA0 I-D...' for column 'Address1' at row 77執行批量數據傳輸時。

    • 這在同一個表中發生了兩次(兩個不同的行)。所有其他表都成功。

症狀:

  • 在 Object Migration -> Manual Editing -> Column Mappings 螢幕上,我看到了遷移消息/警告列表。

    • 在從源 VARCHAR/NVARCHAR 到 VARCHAR 的列上,我得到“排序規則 SQL_Latin1_General_CP1_CI_AS 已遷移到 utf8_general_ci。對於 Char 到 Char 也是如此。
    • 在從源 BIT 到 TINYINT(1) 的列上,我得到“源列類型 BIT 已遷移到 TINYINT(1)

設置:

  • 源選擇是 MSSQL Server、ODBC(免費 TDS)

    • 高級選項卡已選中“驅動程序將 Unicode 數據作為 UTF-8 發送”。免費 TDS 所需
  • 目標選擇是本地 MySQL。連接方式為標準(TCP/IP)

我讀過這篇似乎很有希望的文章,但我不確定如何實施第 3 步,因為它是一個遷移,當我進入“創建模式”步驟時,它說它將刪除模式並重新創建它已經存在。

  • 該數據庫上的所有索引都在小列上,因此 3 位到 4 位 utf8 不會成為索引的問題。
  • 至於“修改連接、客戶端和伺服器字元集”為utf8mb4,我什至找不到要修改的文件。我去了 MySQL Server 5.7/my-default.ini 並將其更改為包含
[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

根據要求,但我的變數仍然如下圖所示,所以這顯然不是正確的文件。另外,我真的可以在 Amazon RDS 實例上訪問它嗎?

在此處輸入圖像描述

有什麼想法嗎?

HexA0可能來自 Word 文件,它是一個“硬空間”。

看來您沒有指定源是“latin1”而目標是“utf8”。否則,A0應該變成C2A0. 這似乎是正確的。但是,這似乎不正確:“驅動程序將 Unicode 數據作為 UTF-8 發送”。或者可能只是與“Collat​​ion SQL_Latin1_General_CP1_CI_AS 已遷移到 utf8_general_ci”不一致。你在 ODBC 中做了什麼來告訴它把 latin1 轉換為 utf8 嗎?

你有一個不一致的地方——有些地方提到了 utf8,有些地方提到了 utf8mb4。在 MySQL 之外,只有“utf8”(或“UTF-8”),但在 MySQL 內部,utf8 和 utf8mb4 是有區別的。如果您打算處理中文或表情符號,請使用 utf8mb4。

您需要重新啟動 mysql 才能看到您所做的更改。

轉到任務管理器,然後點擊服務選項卡。

在服務選項卡中,您可以找到要重新啟動的mysql..

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