mysql資料庫存在著編碼問題,主要體現在資料庫裡漢字會出現亂碼,web頁面漢字顯示不正常。
歸結起來只有乙個原因:會出現編碼的地方存在編碼不一致。
web開發中:mysql編碼主要會出現在五個地方:
1. mysql安裝的預設編碼(latin1)-在mysql.ini(mysql安裝根目錄下)中設定。[mysqld]選項,預設沒有。新增即在最後一行加入default-character-set=utf8。
2.mysql資料庫的編碼,原則上預設的編碼是mysql安裝的預設編碼,也可以在建庫時用語句來執行:create database dbname default character set utf8;我這裡是建立乙個utf8編碼的dbname資料庫。
3.mysql資料表的編碼,原則上預設是第二步建立的資料庫的編碼。提倡不要在creat table時加上編碼
4.利用程式建立mysql連線時,連線字串使用的編碼。如jdbc,php mysql_connect(),這個地方必須是與你頁面的編碼一致。
5.web程式頁面的編碼,charset=utf8;與4必須一致。
除上面5個地方外,另有乙個不是編碼者所能控制的,那就是瀏覽使用者的瀏覽器的編碼,一般是自動選擇,就不列入了。
上述五個地方,我所知道的保證不出現亂碼的方法是:
1 無所謂,但是如果可以調整的話,可以設定成你所需要統一的乙個編碼,如utf8
2,3比較重要,我所理解的必須是一致。建議是在建庫語句時帶上編碼,建表時就不指定編碼了。
4是必須的,php下:$link = mysql_connect('localhost', 'root', '') or die('could not connect: ' . mysql_error());
echo 'connected successfully';
mysql_select_db('wordpress') or die('could not select database');
mysql_query("set names utf8;"); //這句
如利用pdo的話 $dbh = new pdo($dsn, $config['db']['username'], $config['db']['password']);
$dbh->exec('set character set utf8'); //這句
5在web頁面中必須設定成上面的統一的編碼。
請不要結束,繼續往下看:上述方法中必須統一是統一的編碼,我使用的是utf8,為什麼使用utf8是我正要說的。
備註說明
1、統一使用gbk編碼的話,大多數時候是不會出問題。但是如果遇到·這種字元,這個欄位後的所有漢字都回出現亂碼。這在oracle中同樣存在。因為mysql,oracle的預設編碼似乎都是 (mysql-latin1亦是)iso-8559-1,對某些特殊字元會出現亂碼。因此建議使用utf8。使用utf8亦是我以前排斥的,但是在hiu遇到瘋狂的小覃後改變了我的觀點,utf8有利於建設**的其它版本,比如英文版...,而且設定似乎也沒有絲毫麻煩。。。
2、在上述的乙個過程中,使用了mysql的gui管理工具(除去web形式的phpadmin)的,如果你出現了亂碼問題,那是顯然的。比如sql yog, mysql 的 mysql administrator 是有預設編碼的。所以在建庫,建表的時候盡量使用語句在工具裡來執行,而不是直接右鍵來create database。phpadmin不存在這個問題(它是web程式)。
MySQL中文亂碼解決方案集錦
整理一些mysql中文亂碼解決方案,比較實用。在使用mysql時,插入中文字元,經常會出現亂碼,中文全被用?代替。出現這種情況的原因,多是字符集不匹配造成的。在mysql中,如果使用預設的字符集,在建庫 建表時,預設使用的是latin1字符集,為iso 8859 1西歐字符集。插入中文字元時,與之不...
中文亂碼解決方案
前言 亂碼問題,一直使我們頭疼的問題。今天自己有空好好研究一番。不求太深入,只求只知皮毛。考慮不夠全面,只求給您一點幫助足矣。一 簡單介紹下pageencoding與contenttype的區別 摘自網上 pageencoding 設定jsp原始檔和響應正文中的字符集編碼。contenttype 設...
Mysql中文亂碼最佳解決方案
mysql中文亂碼最佳解決方案 mysql資料庫是乙個開源的資料庫,應用非常廣泛,很多的網際網路公司都在使用它,有的還定製通過修改其源 進行定製開發,那在使用mysql的過程中,也發現了比較多的問題,那最明顯的就是mysql的中文亂碼問題,下面就來說說mysql的中文亂碼的最佳解決方案,另外我們在使...