mysql是我們專案中非常常用的資料型資料庫。但是因為我們需要在資料庫儲存中文字元,所以經常遇到資料庫亂碼情況。下面就來介紹一下如何徹底解決資料庫中文亂碼情況。
1.1、中文亂碼
1 create table user(name varchar(11)); # 建立user表2 insert into table user("carl"); # 新增資料
1 insert into user value("哈哈");1.2、檢視表字元編碼1 mysql>show create table user \g;我們可以看到表的預設字符集是latin1.2 *************************** 1. row ***************************
3table: user
4create table: create table `user` (
5 `name` varchar(11) default null
6 ) engine=innodb default charset=latin1
7 1 row in set (0.00sec)
所以我們在建立表的時候就需要指定表的字符集:
1 create table user(name varchar(11)) default charset=utf8;這樣在linux裡面可以訪問並且可以插入與訪問這個表了。1.3、資料庫與作業系統編碼
雖然在伺服器端可以顯示中文正常,但是在客戶端可能會顯示亂碼。因為我們的伺服器是utf8。
而且資料庫的編碼也存在問題。
這裡我們可以看character_sert_database與character_set_server的字符集都是latin1.那麼在mysql資料庫中,server,database,table的字符集都預設是latin1.下面我們就來看看如何解決mysql亂碼情況。
2.1、session範圍
檢視資料庫編碼:
修改字元編碼:
我們可以看到字符集已經修改成都是utf8了。但是這裡有乙個問題,那就是我們重新開啟乙個命令視窗然後檢視資料編碼就會出現下面的畫面:
2.2、global範圍
mysql設定變數的範圍預設是session範圍。如果設定多個會話的字符集那麼需要設定global範圍:set [global|session] variables …
1 set global character_set_database=utf8;當我們跨會話檢視mysql字符集都會看到都是utf8。如果你以為萬事大吉了的話,那麼你就大錯特錯了。2 set global character_set_server=utf8;
3 show variables like '%char%';
2.3、設定資料全域性範圍
當我們資料庫重啟的時候,你們發現設定global範圍的值又變成latin1了。
修改mysql配置檔案/etc/my.cnf。
1請注意這幾個引數配置的位置,不然可能會啟動不起來mysql服務:[mysqld]
2 character-set-server=utf8
3[client]
4default-character-set=utf8
5[mysql]
6default-character-set=utf8
ok。這下如果你重啟mysql服務也會發現它的字符集是utf8.
而且我們建立表的時候不需要指定字元編碼,它預設就是utf8;
我看網上很多答案都是直接在session級別設定mysql的字元編碼,這是治標不治本的方法。我們還是要從源頭上解決這個問題。那就是修改mysql預設的配置檔案,把它的字符集修改成能夠使用中文字元的utf8就ok了。
解決MySQL中文亂碼問題
最近使用mysql server 5.0的時候會遇到亂碼問題 所以在網上找了一些資料,再加上自己的親身經歷寫下這個文章。mysql會出現中文亂碼的原因幾點 1.server本身設定問題,例如還停留在latin1 2.table的語系設定問題 包含character與collation 3.客戶端程式...
mysql 解決中文亂碼問題
mysql 解決中文亂碼問題 網上說解決mysql 解決中文亂碼問題滿天飛,多如牛毛,很多都不能解 決,其實最快的解決方式就是在註冊載入驅動的時候直接在後面加上一串東西 userssl true useunicode true characterencoding utf8 servertimezon...
解決MySQL中文亂碼問題
決解亂碼費了我好些時間啊!亂碼原因有 1.mysql未設定為支援漢字 2.沒有傳送頭資訊 3.使用的編譯器不符合相應的編碼 決解的方法是 在mysql裡 我用的是wanmp server 1.在mysql目錄下找到my.ini,在 client 新增default character set utf...