1. 程式人生 > >資料庫插入中文異常——ERROR 1366 (HY000): Incorrect string value: '\xD6\xD0\xCE\xC4' for column XXX at row 1

資料庫插入中文異常——ERROR 1366 (HY000): Incorrect string value: '\xD6\xD0\xCE\xC4' for column XXX at row 1

在用以下方法之前,請先執行下面命令檢視。

show variables like 'character%';  ——檢視所有編碼方式

show create table table_name;   ——檢視某個表格的編碼方式

status  ——檢視

檢視修改mysql編碼方式

MySQL的預設編碼是Latin1,不支援中文,要支援中午需要把資料庫的預設編碼修改為gbk或者utf8。

1、需要以root使用者身份登陸才可以檢視資料庫編碼方式(以root使用者身份登陸的命令為:>mysql -u root –p,之後兩次輸入root使用者的密碼),檢視資料庫的編碼方式命令為:

show variables like ‘character%’;
±-------------------------±---------------------------+
| Variable_name | Value |
±-------------------------±---------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
±-------------------------±---------------------------+
從以上資訊可知資料庫的編碼為latin1,需要修改為gbk或者是utf8;
其中,character_set_client為客戶端編碼方式;character_set_connection為建立連線使用的編碼;character_set_database資料庫的編碼;
character_set_results結果集的編碼;
character_set_server資料庫伺服器的編碼;
只要保證以上四個採用的編碼方式一樣,就不會出現亂碼問題。
另一個檢視資料庫編碼的命令:
show variables like ‘collation%’;

一、網上的解決方案很多,但是試了幾個都沒成功。能改的地方都改了,my.ini裡兩個地方[mysql]和[mysqld]都改成了gbk,又多此一舉跑MySQLInstanceConfig.exe裡也設定了預設字符集為gbk,還有在資料庫裡也使用了charset gbk來更改字符集,可無一例外中文還是插不進去。

最後在http://youshini.iteye.com/blog/1073053上又找到一個解決方案,在資料庫裡使用了alter table content modify author varchar(30) character set gbk;這句話之後成功插入了中文!心中那個雞凍啊。

現在知道了,前面把my.ini或者在MySQLInstanceConfig.exe裡改變了編碼字符集之後只對以後建立的表起作用,對於以前建立的表要使用alter table content modify author varchar(30) character set gbk才可以插入中文,當然,嫌這樣一個欄位一個欄位的修改太麻煩可以使用ALTER TABLE OLD_TABLE CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]直接對整個表操作。
。這裡把問題及解決方案貼出方便後來人!個人總結出mysql資料庫要正常插入中文需要三個地方字符集一致:

1、mysql的初始化字符集(my.ini中修改)

2、某個具體的database中通過charset gbk或者\c gbk修改

3、最後這個不是必須的,只是如果在中途改了以上兩個字符集才需要在此修改。把表中的欄位改成和上面兩種一樣的字符集:通過ALTER TABLE OLD_TABLE CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]修改