首頁  >  文章  >  資料庫  >  詳解資料庫MySQL中文亂碼解決方法總結(圖文)

詳解資料庫MySQL中文亂碼解決方法總結(圖文)

黄舟
黄舟原創
2017-03-16 14:18:111304瀏覽

這篇文章主要介紹了資料庫MySQL中文亂碼解決方法總結的相關資料,資料庫保存中文字符,所以經常遇到資料庫亂碼情況,這裡提供了幾種方法,需要的朋友可以參考下

MySQL中文亂碼解決方法

#前言:

MySQL是我們專案中非常常用的資料型資料庫。但是因為我們需要在資料庫中保存中文字符,所以經常遇到資料庫亂碼情況。以下就來介紹如何徹底解決資料庫中文亂碼狀況。

1、中文亂碼

1.1、中文亂碼


 create table user(name varchar(11));  # 创建user表
 insert into table user("carl");     # 添加数据
 select * from user;

詳解資料庫MySQL中文亂碼解決方法總結(圖文)


insert into user value("哈哈");

無法插入中文字元:

詳解資料庫MySQL中文亂碼解決方法總結(圖文)

#1.2、檢視表格字元編碼


mysql> show create table user \G;
*************************** 1. row ***************************
    Table: user
Create Table: CREATE TABLE `user` (
 `name` varchar(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

我們可以看到表格的預設字元集是latin1.

所以我們在建立表格的時候就需要指定表的字元集:


 create table user(name varchar(11)) default charset=utf8;

這樣在Linux裡面可以存取並且可以插入與存取這個表了。

詳解資料庫MySQL中文亂碼解決方法總結(圖文)

1.3、資料庫與作業系統編碼

雖然伺服器端可以顯示中文正常,但在客戶端可能會顯示亂碼。因為我們的伺服器是UTF8。

詳解資料庫MySQL中文亂碼解決方法總結(圖文)

而且資料庫的編碼也存在問題。

詳解資料庫MySQL中文亂碼解決方法總結(圖文)

這裡我們可以看character_sert_database與character_set_server的字元集都是latin1.那麼在mysql資料庫中,server,database,table的字元集都預設是latin1.下面我們就來看看如何解決mysql亂碼狀況。

2、mysql設定變數的範圍

#2.1、session範圍

檢視資料庫編碼:


show variables like '%char%';

詳解資料庫MySQL中文亂碼解決方法總結(圖文)

修改字元編碼:


set character_set_server=utf8;
set character_set_database=utf8;
show variables like '%char%';

詳解資料庫MySQL中文亂碼解決方法總結(圖文)

##我們可以看到字元集已經修改成都是utf8了。但這裡有一個問題,那就是我們重新開啟一個命令視窗然後查看資料編碼就會出現下面的畫面:

詳解資料庫MySQL中文亂碼解決方法總結(圖文)

2.2、global範圍

mysql設定變數的範圍預設是session範圍。如果設定多個會話的字元集那麼需要設定global範圍:Set [global|session] variables …


set global character_set_database=utf8;
set global character_set_server=utf8;
show variables like '%char%';

當我們跨會話查看

mysql字元集都會看到都是utf8。如果你以為萬事大吉了的話,那你就大錯特錯了。

2.3、設定資料全域範圍

當我們資料庫重新啟動的時候,你們發現設定global範圍的值又變成latin1了。


service mysqld restart
mysql -uroot -pyourpassword
show variables like '%char%';

詳解資料庫MySQL中文亂碼解決方法總結(圖文)

不要害怕,下面就教你終極大招:

修改mysql

設定檔/etc/my.cnf。


[mysqld]
character-set-server=utf8 
[client]
default-character-set=utf8 
[mysql]
default-character-set=utf8

請注意這幾個參數配置的位置,不然可能會啟動不起來mysql服務:

詳解資料庫MySQL中文亂碼解決方法總結(圖文)## OK。這下如果你重啟mysql服務也會發現它的字元集是utf8.

詳解資料庫MySQL中文亂碼解決方法總結(圖文)#而且我們建立表格的時候不需要指定字元編碼,它預設就是utf8;

drop database test;
create database test;
use test;
create table user(name varchar(11));
show create table user \G;

詳解資料庫MySQL中文亂碼解決方法總結(圖文)

3、總結

我看網路上很多答案都是直接在session級別設定mysql的字元編碼,這是治標不治本的方法。我們還是要從源頭解決這個問題。那就是修改mysql預設的設定文件,把它的字元集修改成能夠使用中文字元的UTF8就OK了。

以上是詳解資料庫MySQL中文亂碼解決方法總結(圖文)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn