我已经很长时间没有问题地使用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/