web-dev-qa-db-ja.com

utf-8でエンコードされたテキストをMySQLテーブルにロードする

大きなCSVファイルがあり、それをMySQLテーブルにロードします。ただし、これらのデータには英語以外の文字が含まれているため、utf-8形式にエンコードされます。テーブル内の対応する列の文字セットをすでにutf-8に設定しています。しかし、ファイルをロードするとき。英語以外の文字が変な文字になります(テーブルの行で選択を行うと)。テーブルに読み込む前にデータをエンコードする必要がありますか?はいの場合、どのようにこれを行うことができます。 Pythonを使用してデータをロードし、LOAD DATA LOCAL INFILEコマンドを使用しています。

26
Hossein

http://dev.mysql.com/doc/refman/5.1/en/load-data.html で述べたように、CSVファイルで使用される文字セットを「CHARACTER SET」で指定できますLOAD DATA LOCAL INFILEのオプションパラメータ

16
dweeves

試して

LOAD DATA INFILE 'file'
IGNORE INTO TABLE table
CHARACTER SET UTF8
FIELDS TERMINATED BY ';'
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
85
JMHeap

送ってください

init_command = 'SET NAMES UTF8'
use_unicode = True
charset = 'utf8'

mySQLdb.connect()を実行するとき.

dbconfig = {}
dbconfig['Host']            = 'localhost'
dbconfig['user']            = ''
dbconfig['passwd']          = ''
dbconfig['db']              = ''
dbconfig['init_command']    = 'SET NAMES UTF8'
dbconfig['use_unicode']     = True
dbconfig['charset']         = 'utf8'

conn = MySQLdb.connect(**dbconfig)

編集:ああ、申し訳ありませんが、「LOAD DATA LOCAL INFILE」を使用していることを追加したことがわかります-これは最初の質問から明らかではありませんでした:)

2
simon

ファイル内の文字をエンコードする必要はありませんが、このファイルをデータベースにロードする前に、ファイルがUTF-8でエンコードされていることを確認する必要があります。

2
BuiXuanThanh

次のようなものを試してください、

LOAD DATA LOCAL INFILE "file" INTO TABLE message_history CHARACTER SET UTF8 COLUMNS TERMINATED BY '|' '"'でオプションで囲まれています '"'でエスケープ;

元の構造、

https://dev.mysql.com/doc/refman/8.0/en/load-data.html

0