1.问题
mysql> insert into tab_keyWords_comments(abbreviation,comment)VALUES('PA','Programming Assignment,编程作业');
ERROR 1366 (HY000): Incorrect string value: '\xE7\xBC\x96\xE7\xA8\x8B...' for column 'comment' at row 1
2. 对我来说有效的解决方法
目的 | 语句 |
查看数据库编码 | show variables like 'char%'; |
查看数据表字段编码 | show full columns from tablename; |
更改mysql服务器的编码为utf8 | SET character_set_server = utf8; |
更改数据库连接的编码为utf8 | SET character_set_connection = utf8; |
更改数据库编码为utf8 | SET character_set_database = utf8; |
更改某个数据表的编码为utf8 | alter table tablename convert to character set utf8; |
查看这个数据库中的表 | show tables; |
查看数据库配置文件在哪 | locate my.cnf (linux命令) |
mysql> show variables like 'char%';
+--------------------------+----------------------------+
| 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)
mysql> show full columns from tab_keyWords_comments;
+--------------+--------------+-------------------+------+-----+---------+----------------+---------------------------------+---------+
| Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment |
+--------------+--------------+-------------------+------+-----+---------+----------------+---------------------------------+---------+
| indexNum | int(11) | NULL | NO | PRI | NULL | auto_increment | select,insert,update,references | |
| abbreviation | varchar(20) | latin1_swedish_ci | NO | UNI | NULL | | select,insert,update,references | |
| comment | varchar(200) | latin1_swedish_ci | YES | | NULL | | select,insert,update,references | |
+--------------+--------------+-------------------+------+-----+---------+----------------+---------------------------------+---------+
3 rows in set (0.00 sec)
mysql> alter table tab_keyWords_comments convert to character set utf8;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show full columns from tab_keyWords_comments;
+--------------+--------------+-----------------+------+-----+---------+----------------+---------------------------------+---------+
| Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment |
+--------------+--------------+-----------------+------+-----+---------+----------------+---------------------------------+---------+
| indexNum | int(11) | NULL | NO | PRI | NULL | auto_increment | select,insert,update,references | |
| abbreviation | varchar(20) | utf8_general_ci | NO | UNI | NULL | | select,insert,update,references | |
| comment | varchar(200) | utf8_general_ci | YES | | NULL | | select,insert,update,references | |
+--------------+--------------+-----------------+------+-----+---------+----------------+---------------------------------+---------+
3 rows in set (0.00 sec)
mysql> insert into tab_keyWords_comments(abbreviation,comment)VALUES('PA','Programming Assignment,编程作业');
Query OK, 1 row affected (0.00 sec)
mysql> select * from tab_keyWords_comments;
+----------+--------------+-------------------------------------+
| indexNum | abbreviation | comment |
+----------+--------------+-------------------------------------+
| 1 | PA | Programming Assignment,编程作业 |
+----------+--------------+-------------------------------------+
1 row in set (0.00 sec)
3.我的小结
据观察,其实不一定需要把character相关的几个编码一定改成gbk,但是一定要做到的就是数据库的某
些编码格式与表的字段的编码格式是一致的,都改成utf8也是可以的,只要一致就可以.
(JUST MY OPINION)
具体是什么要和表的编码格式一致还需要做一定的探究,目前我这个在我的环境上算是治标了,问题原因
还需要进一步
总结:
(1)各个编码会影响什么问题?
(2)为什么会导致这种错误的发生?
(3)什么编码保持就只就可以不发生这个问题了?