MySQL 字符集引起的Error 1366错误。

错误提示:

ERROR 1366 (HY000): Incorrect string value: '\xE5\xB9\xB3\xE5\xAE\x89...' for column 'name' at row 1

解决步骤:

1. 查看通过命令“show variables like "%character%; ” 数据库字符集

mysql> show variables like '%character%' ;
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

2. 查看表和列字符集信息。使用 show create table tableName\G

mysql> show create table my_table1\G;
*************************** 1. row ***************************
       Table: my_table1
Create Table: CREATE TABLE `my_table1(
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `code` varchar(6) DEFAULT NULL,
  `name` varchar(10) DEFAULT NULL,
  `pinyin` varchar(10) DEFAULT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

3.默认情况使用数据库字符集,如果定义了table字符集,则使用table字符集,如果定义了字符串列的字符集,则该列使用对应的字符集。

因为导入的数据为以utf8格式存放的中文汉字,导入数据的时候就会出错。

解决方案:

1. 在表为空白表时,更改该表的字符集。如可以很简单的drop该表,重新创建该表并指示表的字符集。或者alter table. 然后再导入数据。

drop table my_table1;


create table my_table1 (ID INT not null primary key auto_increment, code varchar(6),name varchar(10),pinyin varchar(10)) default charset=utf8;

 

load data infile "table1data.csv" into table my_table1 fields terminated by ',' lines terminated by '\r\n' ignore 1 lines (code, name, pinyin);

问题解决!

参考文章:

http://blog.chinaunix.net/uid-20180960-id-1972668.html

发表评论