MySQL5.6 插入中文字段出錯的解決辦法

最近學習mysql數據庫,安裝了MySQL5.6,開始練習,在表格中插入中文字段時提示插入字符串非法。

花了一天的時間才終於找到原因並解決。得出的結論是:對主要用的字符集,我們一開始就要設置好這些個環境變量,將減少很多麻煩事情的發生。

分析:

1、MySQL5.6對字符集的定義太分散和靈活,分爲服務器、客戶端、數據庫、表、字段,都可以單獨指定字符集;

2、在5個層面上任何一個層面的設置,只能在下層板塊新建的時候才能自然繼承;比如服務器端爲utf8字符集,建立數據庫的時候只要不指定,就會自然繼承採用utf8;

3、由於各個層面獨立,服務器層面的改變在系統重啓後並不會將已有的客戶端、數據庫、表和字段的字符集(比如gbk)強制到新的字符集(比如utf8)設定;如果要實現各個層面的統一,我們需要手工去完成整個鏈路的統一。

4、在以命令行運行的模式下(練習的時候通常是這樣子),還有確定我們的操作系統採用的是什麼字符集。在win7的cmd窗口,可以點擊左上角的圖標,在下拉框的屬性菜單頁,看到當前代碼頁,我的系統是用的GBK字符集,這點很重要,數據庫系統使用的字符集全部要改爲gbk,否則總是報錯。

解決步驟(以win7下MySQL5.6爲例,設置爲gbk字符集)

1、打開數據庫數據目錄(這個目錄是隱藏的)C:\ProgramData\MySQL\MySQL Server 5.6\my.ini文件;找到並修改如下

[mysql]
default-character-set=gbk

[mysqld]

character_set_server = gbk

文件保存後重啓MySQL服務(先停止再開啓,停止服務前要退出MySQL登錄狀態,回到系統命令提示符(如C:\>)的命令狀態,停止服務的命令是net stop mysql56,啓動的命令是net start mysql56)。

2、用mysql -uroot -p命令登錄服務器

3、查看數據庫系統的字符集:show variables like '%character%';可以看到除了“-system”和“-filesystem”兩項外,都已經改爲gbk了,這個就可以了。

4、啓用我們要的數據庫,用命令 use test1;然後查看數據庫的缺省字符集 show create database test1;得到以下結果:

如果不是我們想要的,那就用:alter database test1 default character set gbk;改過來。

5、用show create table ts1;命令查看其默認的字符集;

如不是gbk,就用alter table ts1  default character set gbk;

6、同時可以看到name字段的字符集是utf8,也要改過來,否則做插入命令會顯示錯誤:

因此要把name字段的字符集也改爲gbk;使用命令alter table ts1 modify name varchar(20) character set gbk;

再用show create table ts1查看時name字段的字符集定義就消失了,因爲他和表的字符集是統一的,就不用顯示了。

再次插入數據,一切正常啦。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章