新聞中心
以下的文章主要講述的是如何正確解決 MySQL 中文亂碼的方案,前兩天在一可靠性很強的網(wǎng)站看見正確解決 MySQL 中文亂碼的方案的資料,覺得挺好,就拿出來供大家分享,望你能有所收獲。

成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),滿城企業(yè)網(wǎng)站建設(shè),滿城品牌網(wǎng)站建設(shè),網(wǎng)站定制,滿城網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,滿城網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
自從寫完下面兩篇文章:
wordpress 1.5升級注意事項-中文亂碼篇
MySQL(和PHP搭配之***組合) 4.1中文亂碼第二擊
過去幾個月就不斷有來信詢問各種MySQL(和PHP搭配之***組合)中文相容的問題,所以有機會看到許多玩家們用的各式連接法與程式,實在太開眼界。
最近因為轉(zhuǎn)換到flex 2做為開發(fā)平臺并重寫一些產(chǎn)品,許多去年寫的framework就無法使用,而其中有部份專門處理多國語系的library也隨之失效,導(dǎo)致我得重新面對這個問題,所以正好籍此機會將一些新心得整理出來。
MySQL(和PHP搭配之***組合)MySQL 中文亂碼的原因
MySQL(和PHP搭配之***組合)會出現(xiàn)中文亂碼的原因不外乎下列幾點:
-MySQL(和PHP搭配之***組合) server本身設(shè)定問題,例如還停留在latin1
-MySQL(和PHP搭配之***組合) table的語系設(shè)定問題(包含character與collation)
-客戶端程式(例如php)的連線語系設(shè)定問題
在之前的兩篇文章中已介紹過如何設(shè)定MySQL(和PHP搭配之***組合) server/table的character/collation。
接下來只需要補充幾點注意事:
MySQL(和PHP搭配之***組合)MySQL 中文亂碼必勝解決法
1、MySQL(和PHP搭配之***組合)啟動時會讀取一個預(yù)設(shè)的config檔,一般名稱為my.ini,而它會到下列兩位置去尋找這個檔案:
C:\windows\my.ini也就是作業(yè)系統(tǒng)的安裝目錄,也有可能是C:\winnt\my.ini
C:\:my.cnf也就是C disk的根目錄
注意不同位置里的檔案suffix不一樣,這點在之前的文章中沒有特別強調(diào),因此那時我是用更復(fù)雜的方法直接重新將MySQL(和PHP搭配之***組合)注冊到service里面,并在那里指定my.ini的位置。
2、my.ini里的內(nèi)容為:
[MySQL(和PHP搭配之***組合)d]
- default-character-set=utf8
- [client]
- default-character-set=utf8
- init_connect='SET NAMES utf8'
其中MySQL(和PHP搭配之***組合)d是指定server啟動時要用的語系,但如果這里設(shè)定為utf8可能會讓許多英文軟體不開心,例如osCommerce/mediaWiki,所以這里建議設(shè)成latin1。
下面的client則是設(shè)定當(dāng)client連線時要使用什么語系,但可惜的是這個設(shè)定不是每個client都會鳥它,基本上只有MySQL(和PHP搭配之***組合)自已家的程式,例如MySQL(和PHP搭配之***組合).exe, MySQL(和PHP搭配之***組合)d.exe, MySQL(和PHP搭配之***組合)admin.exe或是MySQL(和PHP搭配之***組合) Control Center這種程式會去讀取這個設(shè)定檔然后改用utf8連線。
note:感謝b6s桑熱情相助提供第二行指令,據(jù)說比一支支php程式去設(shè)定connection setting更快,這樣應(yīng)該也可以順便解決phpmyadmin無法正確顯示unicode中文的問題(不過amfphp到是不吃這套,一定要乖乖的自已設(shè)定語系才行)
但大部份工程師應(yīng)該都是自已寫php/jsp(SUN企業(yè)級應(yīng)用的***)程式去連線,此時自然不會讀取這個設(shè)定而繼續(xù)使用預(yù)設(shè)的語系- latin1。
這也正是八成來信朋友陣亡的地方。
通常我會用一個獨立的檔案來處理MySQL(和PHP搭配之***組合) connection的設(shè)定,例如:
- PLAIN TEXT
- //database connection details.
- $host = "localhost";
$link = MySQL(和PHP搭配之***組合)_connect($host, "xxx", "xxx");
MySQL(和PHP搭配之***組合)_query("SET NAMES 'utf8'");
MySQL(和PHP搭配之***組合)_select_db("your_table_name_here", $link);
?>
請注意在MySQL(和PHP搭配之***組合)_connect后第五行的地方有加上一個"set names 'utf8' "的指令,告訴MySQL(和PHP搭配之***組合)這個connection之后的連線內(nèi)容都要使用utf8,經(jīng)過這樣設(shè)定后,通常就可以解決大部份問題。
從這里也可以推想得知,如果你有用某種custom connection pooling機制,就要記得在每次建立新的connection后立即設(shè)定為utf8。
這組設(shè)定經(jīng)過幾天的反覆測試(使用中文繁、簡、日文、韓文)后已經(jīng)證實完全不會有亂碼或是某些字變成"口"。
例子:試者輸入這幾個字「不道可否啰」如果它們能正確進入MySQL(和PHP搭配之***組合)再被讀出來,那就是中文沒問題了,如果讀出來后變成『口』字那就是革命還未成功同志仍需努力...orz
當(dāng)然我也順便驗證了flex2 - amfphp - php - MySQL(和PHP搭配之***組合)來回傳resultset也不再會有MySQL 中文亂碼問題,可以安心使用啰。
【編輯推薦】
- MySQL數(shù)據(jù)表中字段的批量修改與復(fù)制
- MySQL查詢優(yōu)化的5個好用方法
- MySQLunion 語法代碼演示
- MySQL ALTER語法的運用
- MySQL修改表結(jié)構(gòu)alter 實操
新聞標(biāo)題:正確解決MySQL中文亂碼的實操
分享網(wǎng)址:http://fisionsoft.com.cn/article/djiogps.html


咨詢
建站咨詢
