У меня есть большой CSV-файл, который я собираюсь загрузить в таблицу MySQL. Однако эти данные кодируются в формате utf-8, поскольку они содержат некоторые неанглийские символы. Я уже установил набор символов соответствующего столбца в таблице на utf-8. Но когда я загружаю свой файл. неанглийские символы превращаются в странные символы (когда я выбираю строки в моей таблице). Нужно ли мне кодировать свои данные перед загрузкой в таблицу? если да, то как я могу это сделать. Я использую Python для загрузки данных и использую команду LOAD DATA LOCAL INFILE. Благодарность
Загрузка текста в кодировке utf-8 в таблицу MySQL
Ответы (5)
как сказано в http://dev.mysql.com/doc/refman/5.1/en/load-data.html, вы можете указать кодировку, используемую вашим CSV-файлом, с помощью необязательного параметра "CHARACTER SET" в LOAD DATA LOCAL INFILE
Пытаться
LOAD DATA INFILE 'file'
IGNORE INTO TABLE table
CHARACTER SET UTF8
FIELDS TERMINATED BY ';'
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
Не нужно кодировать ваши символы в файле, но вам нужно убедиться, что ваш файл кодируется в UTF-8, прежде чем загружать этот файл в базу данных.
Вы должны отправить
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)
edit: ах, извините, я вижу, вы добавили, что используете "LOAD DATA LOCAL INFILE" - это не было ясно из вашего первоначального вопроса :)
Попробуйте что-нибудь вроде,
ЗАГРУЗИТЬ ЛОКАЛЬНЫЙ ИНФАЙЛ ДАННЫХ "файл" В ТАБЛИЦУ message_history НАБОР СИМВОЛОВ UTF8 СТОЛБЦЫ, ОКОНЧЕННЫЕ '|' ФАКУЛЬТАТИВНО ЗАКРЫТО '"' ESCAPED BY '"';
Оригинальная структура,
https://dev.mysql.com/doc/refman/8.0/en/load-data.html
CHARACTER SET utf8mb4
, как описано здесь: stackoverflow.com/a/10959780/470749 - person Ryan   schedule 03.09.2018