Загрузка текста в кодировке utf-8 в таблицу MySQL

У меня есть большой CSV-файл, который я собираюсь загрузить в таблицу MySQL. Однако эти данные кодируются в формате utf-8, поскольку они содержат некоторые неанглийские символы. Я уже установил набор символов соответствующего столбца в таблице на utf-8. Но когда я загружаю свой файл. неанглийские символы превращаются в странные символы (когда я выбираю строки в моей таблице). Нужно ли мне кодировать свои данные перед загрузкой в ​​таблицу? если да, то как я могу это сделать. Я использую Python для загрузки данных и использую команду LOAD DATA LOCAL INFILE. Благодарность


person Hossein    schedule 10.02.2011    source источник
comment
Вот и была моя проблема. Для определенных символов, таких как определенные смайлики, необходимо использовать CHARACTER SET utf8mb4, как описано здесь: stackoverflow.com/a/10959780/470749   -  person Ryan    schedule 03.09.2018


Ответы (5)


как сказано в http://dev.mysql.com/doc/refman/5.1/en/load-data.html, вы можете указать кодировку, используемую вашим CSV-файлом, с помощью необязательного параметра "CHARACTER SET" в LOAD DATA LOCAL INFILE

person dweeves    schedule 10.02.2011
comment
Это не говорит о том, что mysql неправильно использует другую кодировку, независимо от того, какую кодировку столбца вы установили! - person John; 18.10.2018

Пытаться

LOAD DATA INFILE 'file'
IGNORE INTO TABLE table
CHARACTER SET UTF8
FIELDS TERMINATED BY ';'
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
person JMHeap    schedule 18.01.2013
comment
добавление CHARACTER SET UTF8 было ключевым! - person nemnesic; 27.05.2016
comment
О боже, у меня ушло так много времени. Пробовал все, он просто продолжал преобразовывать utf8 в латынь и импортировать его в таблицу utf 8. Вариант кодирования творит чудеса. - person John; 13.10.2017
comment
В основном это ошибка mysql вплоть до последней версии, включая MariaDb. Если таблица или столбец имеет кодировку UTF8, она должна автоматически принимать правильные значения. Ну, это не так, вам нужно указать это и надеяться, что у вас нет смешанной таблицы. - person John; 18.10.2018

Не нужно кодировать ваши символы в файле, но вам нужно убедиться, что ваш файл кодируется в UTF-8, прежде чем загружать этот файл в базу данных.

person BuiXuanThanh    schedule 08.06.2014

Вы должны отправить

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" - это не было ясно из вашего первоначального вопроса :)

person simon    schedule 10.02.2011
comment
Это зависит от языка программирования. - person miyalys; 21.02.2019
comment
@miyalys - да, это питон, как указано в вопросе ... вы за это проголосовали против ?! - person simon; 27.02.2019
comment
...и да. Я пытался отменить его, но сайт, к сожалению, не позволяет мне изменить голосование до того, как ответ будет отредактирован. Так что, если вы в какой-то момент отредактируете его каким-либо образом, дайте мне знать, и я отменим его. - person miyalys; 06.03.2019

Попробуйте что-нибудь вроде,

ЗАГРУЗИТЬ ЛОКАЛЬНЫЙ ИНФАЙЛ ДАННЫХ "файл" В ТАБЛИЦУ message_history НАБОР СИМВОЛОВ UTF8 СТОЛБЦЫ, ОКОНЧЕННЫЕ '|' ФАКУЛЬТАТИВНО ЗАКРЫТО '"' ESCAPED BY '"';

Оригинальная структура,

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

person Hasitha Nanayakkara    schedule 10.07.2019