2016-03-23 6 views
4

Я использую mysqlimport без проблем в течение длительного времени, теперь, когда mysql 5.7 добавлена ​​поддержка типа данных json, я пытаюсь использовать mysqlimport со строками, содержащими json данные.mysqlimport issues "set @@ character_set_database = binary", который предотвращает загрузку json-значений

Вот пример строки в CSV-файл, который будет импортироваться с помощью mysqlimport:

column_A_value,column_B_value,[{"x":20,"y":"some name"}] 

Обратите внимание, что последний тип столбца в формате JSON. Теперь при использовании mysqlimport как:

mysqlimport -u user -ppass -h localhost --columns='col_A,col_B,col_C' --local --fields-terminated-by=',' some_db /path/to/products.txt 

я получил следующее сообщение об ошибке: Cannot create a JSON value from a string with CHARACTER SET 'binary'., when using table: products

Однако, используя сгенерированный LOAD DATA IN FILE вместо mysqlimport работал без проблем! Я открыл журнал mysql и проверил сгенерированную команду LOAD DATA IN FILE при запуске mysqlimport, затем скопировал и вставил ее, и он работал без проблем! Я пробежал что-то вроде:

LOAD DATA LOCAL INFILE '/path/to/products.txt' 
INTO TABLE products 

И это сработало! Единственное отличие состоит в том, что в журнале, при запуске mysqlimport эта линия была сформирована и

Query /*!40101 set @@character_set_database=binary */ 

Затем генерируется LOAD DATA IN команды FILE, так что линия является источником проблемы.

Так или иначе, я попытался установить набор символов utf8,

mysqlimport -u user -ppass -h localhost --columns='col_A,col_B,col_C' --local --fields-terminated-by=',' --default-character-set=utf8 some_db /path/to/products.txt 

, но напрасно, произошло та же ошибка.

Так какой-нибудь ключ, как решить этот набор символов, пожалуйста?

ответ

0

Проверьте набора символов конфигурации:

show variables like ‘%char%';

Не реагирует на --default-character-set все еще может быть ошибка в mysqlimport: https://bugs.mysql.com/bug.php?id=29712

Возможные решения:

  1. Попробуйте SET NAMES utf8; перед импорт
  2. Попробуйте использовать mysql с --default-character-set=utf8 вместо mysqlimport
  3. Alter ваш my.cnf:
[mysqld] 
init-connect='SET NAMES utf8' 
character-set-server=utf8 
collation-server=utf8_general_ci 
default-character-set=utf8 

[client] 
default-character-set=utf8 
+0

Ни один из вышеперечисленных предложений не работал для меня. Обратите внимание, что в MYSQL версии 5 или выше вам нужно будет использовать разные значения для установки кодировки по умолчанию, поскольку они не рекомендуют это. Примеры здесь: http://outofcontrol.ca/blog/comments/change-mysql-5.5-default-character-set-to-utf8 –

+0

Использование 'mysql' должно работать. Что касается 'my.cnf', кажется, что' init-connect' и 'default-character-set' больше не принадлежат разделу' [mysqld] '. –