兩邊入手,
創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供梅里斯網站建設、梅里斯做網站、梅里斯網站設計、梅里斯網站制作等企業(yè)網站建設、網頁設計與制作、梅里斯企業(yè)網站模板建站服務,十多年梅里斯做網站經驗,不只是建網站,更提供有價值的思路和整體網絡服務。
PHP,需要設置頁面編碼,加一行代碼:
header('Content-Type:text/html;charset=utf-8');
這樣就把輸出編碼改為了UTF-8
但是,MySQL也要設置,那就是連接到數(shù)據庫之后再加一行
mysql_query("SET
NAMES
`UTF-8`");
即可
當然,你得保證你的數(shù)據庫的字符集是UTF-8
如果仍然出錯,那就說明數(shù)據庫的字符集配置有問題
ISO-8859-1是單字節(jié)字符集,又稱Latin-1,向下兼容ASCII,所以你可以嘗試直接使用GBK編碼寫入數(shù)據庫。
其實數(shù)據庫本身只是存儲而已,你所說的亂碼只是你的數(shù)據庫查看工具所反映出來的現(xiàn)象。如果你頁面本身用的是UTF-8編碼,存入數(shù)據庫和讀出應該都是正常的,而不必糾結數(shù)據庫查詢工具所看到的現(xiàn)象?;蛘咧荒芡ㄟ^設置數(shù)據庫編碼、數(shù)據庫查看工具編碼、頁面源代碼編碼三者一致才能最好地解決這個問題。
如果設置了set names utf8還是亂碼的話,你需要看看數(shù)據庫的編碼格式了,亂碼產生的原因,是因為存放時的編碼和取出數(shù)據展示的編碼不一致,導致的不能正常顯示,你先查看數(shù)據庫的編碼合適,存放數(shù)據庫開始檢查
數(shù)據庫使用utf8編碼,需要在操作的過程中統(tǒng)一全部編碼。
1.數(shù)據庫默認編碼
CREATE?DATABASE?`test`?DEFAULT?CHARACTER?SET?'utf8';
2.表默認編碼
CREATE?TABLE?`tablea`(
`id`?INT?NOT?NULL?AUTO_INCREMENT,
`title`?VARCHAR(100)?NULL,
)ENGINE=InnoDB?DEFAULT?CHARSET=utf8;
3.字段默認編碼
默認情況下,字段的編碼同表的編碼,但是如果修改了表的編碼,字段編碼不會同步修改,需要手動修改
這里修改編碼測試我將utf8 改為 gb2312? ,僅用于觀察修改后的情況(實際使用中可能是將gbk修改為utf8)
ALTER?TABLE?`test`.`tablea`?CHARACTER?SET?=?gb2312?;
--?修改表編碼后,查看建表語句
show?create?table?`tablea`;
--?可以看到輸出的建表語句中字段單獨設置了編碼
CREATE?TABLE?`tablea`(
`id`?INT?NOT?NULL?AUTO_INCREMENT,
`title`?VARCHAR(100)?CHARACTER?SET?utf8?NULL,
)ENGINE=InnoDB?DEFAULT?CHARSET=gb2312;
--?需要手動修改字段編碼
ALTER?TABLE?`tablea`?
CHANGE?COLUMN?`title`?`title`?VARCHAR(100)?CHARACTER?SET?'gb2312'?NULL?DEFAULT?NULL?;
4.當前數(shù)據庫連接的編碼
連接數(shù)時設置編碼
//?PDO?連接
$db?=?new?PDO('mysql:host=myhost;dbname=test',?'login',?'password',?
array(PDO::MYSQL_ATTR_INIT_COMMAND?=?'SET?NAMES?\'UTF8\'')
);?
//?mysqli連接
$link?=?mysqli_connect("127.0.0.1",?"my_user",?"my_password",?"test");
mysqli_query($link,"SET?NAMES?'utf8';");
通過以上幾步操作,基本可以保證數(shù)據庫使用過程中不會出現(xiàn)亂碼