2017-02-03 9 views
3

MSSQLからMySQLにデータを移動しようとしています。Mysqlデータの移行 - wbcopytables charset

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

私のサーバー、データベース、テーブル、カラムはcharset=utf8mb4を持っている:私はwbcopytables.exeを実行しているときのMySQL接続の文字セットが間違っているようだ、私はデータは絵文字アイコンが含まれているエラー(http://apps.timwhitlock.info/unicode/inspect?s=%F0%9F%8C%A8%E2%98%83%EF%B8%8F)を取得していますcollation=utf8mb4_unicode_ci。しかし、私はの絵文字アイコンをそのテーブルに、私が作成した.NETアプリケーションで挿入することができるので、スキーマ/サーバ設定の問題ではありません。これにより、私はwbcopytables.exeが接続で他のエンコーディング(おそらくutf8)を実施していると思うようになります。

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

EDIT:私はmy.iniファイルにこれらと他のSOの質問で提案されているようutf8mb4を強制するすべてのMySQLの変数を変更しようとした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

I:ここでwbcopytables.exe自体の詳細については、同様の問題がありましたが、ソースデータベースに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ステップ1を取得しなければならなかったとして、行がそう|'を持っているでしょうこれらの行を取り除いたり、grepや同様のコマンドを使用して編集することができます。

私はそれが楽しいと言うことはできませんが、それは動作します。