我一直在使用mysqlimport没有问题很长一段时间,现在作为MySQL 5.7添加json数据类型的支持,我试图使用mysqlimport的行包含json数据。mysqlimport问题“设置@@ character_set_database =二进制”,它可以防止加载json值
这里是CSV文件中的一行,将使用的mysqlimport导入的示例:
column_A_value,column_B_value,[{"x":20,"y":"some name"}]
注意,最后一列类型是JSON。现在,当使用的mysqlimport如下所示:使用产生的LOAD DATA IN FILE
代替mysqlimport的工作没有问题Cannot create a JSON value from a string with CHARACTER SET 'binary'., when using table: products
但是:
mysqlimport -u user -ppass -h localhost --columns='col_A,col_B,col_C' --local --fields-terminated-by=',' some_db /path/to/products.txt
我得到了下面的错误!我在运行mysqlimport时打开mysql日志并检查了生成的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这条线,从而使线是问题的根源。
所以无论如何我试着设置字符集为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
但不成功,同样的错误发生。
因此,任何线索如何解决这个字符集问题?
的上述建议没有为我工作。请注意,在MYSQL版本5或更高版本中,您将需要使用不同的值来设置默认字符集,因为它们已被弃用。这方面的例子:http://outofcontrol.ca/blog/comments/change-mysql-5.5-default-character-set-to-utf8 –
使用'mysql'should合作。至于'my.cnf',似乎'init-connect'和'default-character-set'不再属于'[mysqld]'部分。 –