使用 MySQL Workbench 從 MSSQL 遷移到 MySQL 時出現 UTF8 問題
我的任務是將我們的部分數據庫從現場 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 實例上訪問它嗎?
有什麼想法嗎?
Hex
A0
可能來自 Word 文件,它是一個“硬空間”。看來您沒有指定源是“latin1”而目標是“utf8”。否則,
A0
應該變成C2A0
. 這似乎是正確的。但是,這似乎不正確:“驅動程序將 Unicode 數據作為 UTF-8 發送”。或者可能只是與“Collation SQL_Latin1_General_CP1_CI_AS 已遷移到 utf8_general_ci”不一致。你在 ODBC 中做了什麼來告訴它把 latin1 轉換為 utf8 嗎?你有一個不一致的地方——有些地方提到了 utf8,有些地方提到了 utf8mb4。在 MySQL 之外,只有“utf8”(或“UTF-8”),但在 MySQL 內部,utf8 和 utf8mb4 是有區別的。如果您打算處理中文或表情符號,請使用 utf8mb4。
您需要重新啟動 mysql 才能看到您所做的更改。
轉到任務管理器,然後點擊服務選項卡。
在服務選項卡中,您可以找到要重新啟動的mysql..