2016-03-23 52 views
4

我一直在使用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 

但不成功,同样的错误发生。

因此,任何线索如何解决这个字符集问题?

回答

0

检查字符集的配置:

show variables like ‘%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 
+0

的上述建议没有为我工作。请注意,在MYSQL版本5或更高版本中,您将需要使用不同的值来设置默认字符集,因为它们已被弃用。这方面的例子:http://outofcontrol.ca/blog/comments/change-mysql-5.5-default-character-set-to-utf8 –

+0

使用'mysql'should合作。至于'my.cnf',似乎'init-connect'和'default-character-set'不再属于'[mysqld]'部分。 –