2017-02-03 74 views
3

我想將一些數據從MSSQL移動到MySQL。當我運行wbcopytables.exe關於MySQL連接字符集似乎是錯的,我得到當數據包含的表情符號圖標(http://apps.timwhitlock.info/unicode/inspect?s=%F0%9F%8C%A8%E2%98%83%EF%B8%8F)錯誤:Mysql數據遷移 - wbcopytables字符集

Incorrect string value: '\xF0\x9F\x8C\xA8\xE2\x98...' for column 'Value' at row 4 

我的服務器,數據庫,表和列有charset=utf8mb4collation=utf8mb4_unicode_ci。然而我可以插入這些表情符號到那張桌子上,我在旁邊創建了一個.NET應用程序,所以它不是模式/服務器設置的問題。這讓我認爲wbcopytables.exe在連接上強制執行一些其他編碼(可能是utf8)。我試圖改變所有的MySQL變量執行utf8mb4在其他SO這些問題建議在my.ini的:

[mysqld] 
character-set-server=utf8mb4 
collation-server=utf8mb4_unicode_ci 
init_connect='SET collation_connection = utf8mb4_unicode_ci' 
skip-character-set-client-handshake 

編輯:下面是關於wbcopytables.exe本身的更多信息:https://dev.mysql.com/doc/workbench/en/wbcopytables.html

+0

誰擁有'wbcopytables'?它的文檔在哪裏? –

+0

我已經更新了這個問題。 'wbcopytables.exe'是MySQL Workbench附帶的CMD實用程序。 – andy250

+0

.NET應用程序是否具有源數據正確編碼的唯一證據?您是否至少使用'NVARCHAR'列並將SQL Server連接編碼設置爲Unicode? –

回答

0

我有一個類似的問題,事實證明,我的源數據庫有latin1編碼,但應用程序允許使用UTF8數據。不用說這造成了問題。我不得不將數據從源數據庫導出到CSV中,然後使用LOAD DATA LOCAL INFILE代替指定的字符編碼。例如。

load data local infile 
'C:\\SentryLink Search\\Git\\WebApp\\sql\\data_subject_address_clean.csv' 
replace into table subject_address 
character set latin1 
fields terminated by ',' OPTIONALLY ENCLOSED BY '\'' 
escaped by '|' 
lines terminated by '\n'; 

請注意,我用的是管道字符|作爲轉義字符,因爲它是不太可能出現的數據,這麼說,每一個現在,然後連續將有|'所以作爲prelimimary一步一個必須得到擺脫這些行,或使用grep或類似的命令編輯它們。

我不能說這很有趣,但它的工作原理。