2016-03-23 51 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]'部分。 –