mysqlimport выдает set @@character_set_database=binary, который предотвращает загрузку значений json

Я давно использую mysqlimport без проблем, теперь, когда в mysql 5.7 добавлена ​​поддержка типа данных json, я пытаюсь использовать mysqlimport со строками, содержащими данные 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

но зря, такая же ошибка случилась.

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


person Community    schedule 23.03.2016    source источник


Ответы (1)


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

показывать переменные типа «%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. Измените свой 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
person Mel_T    schedule 29.03.2016
comment
Ни одно из приведенных выше предложений не сработало для меня. Обратите внимание, что в версиях MYSQL 5 или выше вам нужно будет использовать разные значения для установки кодировки по умолчанию, поскольку они устарели. Примеры здесь: outofcontrol.ca/blog/comments / - person Tegan Snyder; 10.05.2016
comment
Использование mysqlдолжно работать. Что касается my.cnf, кажется, что init-connect и default-character-set больше не относятся к разделу [mysqld]. - person Mel_T; 13.05.2016