程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> mysql 4.1+ 漢字亂碼問題研究 --安恆網管員手記

mysql 4.1+ 漢字亂碼問題研究 --安恆網管員手記

編輯:關於MYSQL數據庫
 在mysql4.1下,一些數據庫裡面的中文會出現??亂碼現象.因為,4.1增加了對utf8的支持,這是件好事.但是,問題是大部分的程序,都是使用的gb2312/gbk這樣的編碼格式,如果把它們都改成utf8格式,要轉換成utf8需要解決的事情比較多.編輯器,浏覽器,mysql-server,MySQL-clIEnt,php,PHP-MySQL,cvs代碼管理,數據庫備份,還有合適的gb2312到utf8的轉換工具.諸多的環節需要考慮.
數據庫的格式轉換,文件程序的格式轉換,和MySQL-server的設置情況記錄一下.
當然真正的轉換,現在還沒有做,現在只是做點規劃.

關於??亂碼,是系統相關的各個環節之間進行代碼轉換出現的問題,比如在shell下用MySQL這個程序對數據庫進行恢復,MySQL會錯誤的把代碼進行轉換,導致亂碼出現,

在轉換之前,我們一定要清楚,文件是什麼格式,數據庫內部是什麼格式,都要統一到utf8下來,不對的要進行格式轉換.

1.數據庫的轉換.
以前數據庫裡面的字符,應該都是gb2312格式,這時,需要把所有的數據庫文件導出成sql文本,然後對文本進行utf-8的格式轉換.這裡要注意的是一些2進值的字段內容會出問題.幸好,在我的項目中,2進值內容都進行了base64編碼,如果數據庫中存在2進值的內容,就要對它們進行單獨的處理了.

用mysqldump把數據從MySQL4.0中導出,此時得到的sql文件應該是gb2312的,然後用iconv這個程序把sql文件改為utf8

導出一個MySQL4.0的庫(服務器:192.168.2.2 庫名:dbname):
MySQLdump -h 192.168.2.2 --add-drop-table -c --set-charset=latin1 --allow-keyWords --force -p -u root dbname >1.sql
內容轉換utf8
iconv -c -f gb2312 -t utf8 1.sql -o 2.sql

在導入到4.1之前,先把mysql-server和MySQL-clIEnt設置到utf8模式.

修改/etc/mysq1/my.cnf,在[mysqld]和[MySQL]各增加1行:
[MySQLd]
character_set_server = utf8
[MySQL]
default-character-set =utf8
保證讓服務器端和客戶端都默認工作在utf8模式下,重啟MySQL-server後就可以導入了.
MySQL -u root -h localhost test <2.sql
到這裡,一個數據庫就轉換完成了.已經完全工作在utf8模式下了.

PHP的程序的修改.也可以用iconv程序.進行.
首先從cvs導出一個干淨的代碼拷貝,比如在net目錄下,
cvs -d :pserver:xxx.xxx.xx.xx net co
刪除一些不需要轉換的文件
然後執行轉換
find . -name "*.PHP" -type f -exec mv {} {}.old \; -exec iconv --verbose -f gb2312 -t utf8 {}.old -o {} \; -exec rm {}.old \;
至此,PHP代碼就批量的轉換到utf8模式.還有就是只要修改html的head的語言聲明,從gb2312改成utf8,浏覽器就會自動使用utf8的模式顯示這個頁面. content="text/Html; charset=utf8"

最後,就是把編輯器改成utf8模式了.這個就比較簡單了.

好了,我們的web應用已經進入utf8模式了.哈哈.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved