我已经很长时间没有问题地使用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日志并在运行mysqlimport时检查了生成的LOAD DATA IN FILE命令,然后将其复制并粘贴了,并且没有问题!我跑了类似的东西:
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

但是徒然,发生了同样的错误。

那么,有什么线索可以解决这个字符集问题吗?

最佳答案

检查您的字符集配置:



不响应--default-character-set可能仍然是mysqlimport的错误:
https://bugs.mysql.com/bug.php?id=29712

可能的解决方案:

  • 在导入
  • 之前尝试SET NAMES utf8;
  • 尝试将mysql--default-character-set=utf8一起使用,而不是mysqlimport
  • 更改您的my.cnf:

  • 关于mysqlimport发出 "set @@character_set_database=binary"阻止加载json值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36178312/

    10-13 07:14