5

我一直在使用 mysqlimport 很长时间没有问题,现在由于 mysql 5.7 添加了 json 数据类型支持,我正在尝试将 mysqlimport 与包含 json 数据的行一起使用。

这是将使用 mysqlimport 导入的 csv 文件中的一行示例:

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

但徒劳无功,发生了同样的错误。

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

4

1 回答 1

0

检查您的字符集配置:

显示像'%char%'这样的变量;

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

可能的解决方案:

  1. SET NAMES utf8;导入前试试
  2. 尝试使用mysqlwith--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
于 2016-03-29T13:50:59.810 回答