mysqlimport 发出“set @@character_set_database=binary”,这会阻止加载 json 值
Posted
技术标签:
【中文标题】mysqlimport 发出“set @@character_set_database=binary”,这会阻止加载 json 值【英文标题】:mysqlimport issues "set @@character_set_database=binary" which prevents loading json values 【发布时间】:2016-07-10 18:03:19 【问题描述】:我已经使用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
但徒劳无功,发生了同样的错误。
请问有什么办法解决这个字符集问题吗?
【问题讨论】:
【参考方案1】:检查您的字符集配置:
显示变量,如'%char%';
没有回复--default-character-set
可能还是mysqlimport的一个bug:
https://bugs.mysql.com/bug.php?id=29712
可能的解决方案:
-
在导入前尝试
SET NAMES utf8;
尝试使用mysql
和--default-character-set=utf8
而不是mysqlimport
更改您的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
【讨论】:
以上建议都不适合我。请注意,在 MYSQL 版本 5 或更高版本上,您需要使用不同的值来设置默认字符集,因为它们已弃用该字符集。此处的示例:outofcontrol.ca/blog/comments/… 使用mysql
应该可以工作。至于my.cnf
,init-connect
和default-character-set
似乎不再属于[mysqld]
部分。以上是关于mysqlimport 发出“set @@character_set_database=binary”,这会阻止加载 json 值的主要内容,如果未能解决你的问题,请参考以下文章