mysql資料庫 中文亂碼

來源:互聯網
上載者:User

標籤:開啟   name   linu   servlet   page   cte   關閉   成功   服務   

看到一篇很好的文章,轉錄於此

中文亂碼似乎是程式編寫中永恒的一個話題和痛點,就比如MySQL存取中文亂碼,但我想做任何事情,都要有個思路才行,有了思路才知道如何去解決問題,否則,即使一時解決了問題,但過後不久又碰到同樣的問題可能又會急得抓狂,MySQL中文亂碼問題就是如此。

僅僅對MySQL中文亂碼的解決而言,我認為主要的一個原則可以歸結為五個字:“編碼一致性”,只要遵循了這個原則,那麼中文亂碼就不難解決,那麼何為“編碼一致性”呢?子猴總結為有如下四個方面的編碼必須保持一致,才能防止中文的亂碼,下面將具體講解。

首先我要設定的編碼為UTF8,為何要設定UTF8編碼呢?那是因為這是通用編碼,像中國通常使用的GBK、GB2312、Big5等只是針對中文而言,但是對其他文字就不適用了,為了使得這個問題的解決具有文字編碼通用性,所以我這裡設定了UTF8這個編碼。

編碼一致性涉及到的四個方面為:應用程式編碼、資料庫系統編碼、資料庫編碼、應用程式與資料庫系統的串連編碼。

1、  應用程式編碼

指的是你在程式檔案中的文字編碼,以jsp檔案為例來說明,就是你jsp的網頁編碼,比如:

<%@ page contentType="text/html; charset=UTF-8" %>

在這樣的頁面中,往往是調用資料庫介面對資料庫進行存取操作。

2、  與之對應的資料庫系統編碼

資料庫系統就是你所用的MySQL(及其他資料庫系統),資料庫系統的編碼要與應用程式編碼一致,其編碼設定根據作業系統的不同可以通過以下方式設定

2.1、Windosw環境下的MySQL編碼設定

A、中止MySQL服務
B、在MySQL的安裝目錄下找到my.ini,如果沒有就把my-medium.ini複製為一個my.ini即可
C、開啟my.ini以後,在[client]和[mysqld]下面均加上default-character-set=utf8,儲存並關閉
D、啟動MySQL服務

(註:Windows環境下的設定我沒有驗證過)

2.2、Linux環境下的MySQL編碼設定

首先我們登入到mysql,執行: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,很顯然,我們要修改為UTF8。

通過:vi /etc/mysql/my.cnf修改my.cnf檔案,這裡需要注意的是,如果my.cnf檔案不存在,則進入到mysql的安裝目錄,通過執行:cp share/mysql/my-large.cnf /etc/my.cnf產生my.cnf檔案。

加入的內容如下:

在用戶端配置[client]下面添加:

### 預設字元集為utf8
default-character-set=utf8

找到[mysqld]部分,在下面添加:

### 預設字元集為utf8
default-character-set=utf8
### (設定串連mysql資料庫時使用utf8編碼,以讓mysql資料庫為utf8運行)
init_connect=’SET NAMES utf8′

完畢後重啟mysql服務,然後再通過執行show variables like ‘character%’;查看如下:

mysql> show variables like ‘character%’;

+————————–+—————————-+

| Variable_name            | Value                      |

+————————–+—————————-+

| character_set_client     | utf8                       |

| character_set_connection | utf8                       |

| character_set_database   | utf8                       |

| character_set_filesystem | binary                     |

| character_set_results    | utf8                       |

| character_set_server     | utf8                       |

| character_set_system     | utf8                       |

| character_sets_dir       | /usr/share/mysql/charsets/ |

+————————–+—————————-+

3、  資料庫編碼

改完資料庫系統編碼後,接下來輪到資料庫編碼了,請注意資料庫系統與資料庫的區別,資料庫指的是你所建立的資料庫Database及所包含的表,資料庫編碼設定很簡單,在建立資料表的時候設定,舉例如下:

create table Test

(

ID                   integer not null auto_increment,

NAME                 varchar(50) comment ‘測試欄位’,

TYPE                 integer,

primary key (ID)

)

default charset utf8;

其中default charset utf8就表示此表的字元編碼為utf8。

4、  應用程式與資料庫系統的串連編碼

串連編碼相當於應用程式與資料庫系統的溝通橋樑,同樣也需要設定編碼,我們以JDBC的串連語句來予以說明:

jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&amp;characterEncoding=UTF-8&amp;user=test&amp;password=111

上面的語句中為一個test的資料庫,使用者名稱為test,密碼為111的資料庫連接,其編碼為characterEncoding=UTF-8。

通過以上四個方面的設定,那麼mysql的中文亂碼就輕鬆解決了!

如果你過段時間不記得mysql的中文亂碼是如何解決的,那麼你只要知道以上的解決思路,我想解決起來肯定會很快的。

轉自http://www.zihou.me/html/2010/06/07/2245.html

如果這一切都設定無誤,就要思考程式本身的問題了,如果頁面傳入資料庫本身的就是亂碼,那麼就是程式的問題了,仔細核對,果然,問題出現在Servlet的處理上,添加以下語句問題成功解決。

req.setCharacterEncoding("utf-8");

mysql資料庫 中文亂碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.