看看是不是你的字符集合沒(méi)設(shè)置對(duì)
成都創(chuàng)新互聯(lián)公司,為您提供成都網(wǎng)站建設(shè)公司、網(wǎng)站制作、網(wǎng)站營(yíng)銷(xiāo)推廣、網(wǎng)站開(kāi)發(fā)設(shè)計(jì),對(duì)服務(wù)iso認(rèn)證等多個(gè)行業(yè)擁有豐富的網(wǎng)站建設(shè)及推廣經(jīng)驗(yàn)。成都創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)公司成立于2013年,提供專(zhuān)業(yè)網(wǎng)站制作報(bào)價(jià)服務(wù),我們深知市場(chǎng)的競(jìng)爭(zhēng)激烈,認(rèn)真對(duì)待每位客戶(hù),為客戶(hù)提供賞心悅目的作品。 與客戶(hù)共同發(fā)展進(jìn)步,是我們永遠(yuǎn)的責(zé)任!
如果你用的mysql網(wǎng)頁(yè)版 ,在建立表的時(shí)候有個(gè)整合選項(xiàng),你選定utf8_bin
在定義類(lèi)函數(shù)連接數(shù)據(jù)庫(kù)的時(shí)候加上
mysql_connect("localhost","root","password");
mysql_select_db("databasesName");
mysql_query("set names gb2312");
上面那個(gè)是國(guó)標(biāo)的如果是英文程序 改成mysql_query("set names utf8");
要解決亂碼首先需要知道出現(xiàn)亂碼的原因:
一、PHP+MySQL出現(xiàn)中文亂碼的原因。
1. MYSQL數(shù)據(jù)庫(kù)的編碼是utf8,與PHP網(wǎng)頁(yè)的編碼格式不一致,就會(huì)造成MYSQL中的中文亂碼。
2. 使用MYSQL中創(chuàng)建表、或者選擇字段時(shí)設(shè)置的類(lèi)型不是utf8,而網(wǎng)頁(yè)編碼不是utf8,也可能造成MYSQL中文亂碼.
3. PHP頁(yè)面的字符集與數(shù)據(jù)庫(kù)的編碼不一致。
4. PHP連接MYSQL數(shù)據(jù)庫(kù),操作是設(shè)定的語(yǔ)句指定的編碼和頁(yè)面編碼,PHP頁(yè)面編碼不一致。
5. 用戶(hù)提交的HTML頁(yè)面編碼,和顯示數(shù)據(jù)的頁(yè)面編碼不一致 ,就肯定會(huì)造成PHP頁(yè)面亂碼.
二、解決中文亂碼:
1. 網(wǎng)頁(yè)編碼設(shè)置。一般在HTML代碼中的文件頭html中加入屬性:
meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″
保證,網(wǎng)頁(yè)是"utf-8"編碼。
2. PHP代碼設(shè)置。在php代碼的開(kāi)始部分加入以下代碼:
header(”Content-type: text/html;charset=utf-8″);
且要求保存的文件編碼方式是utf-8,這樣就保證了該文件也是utf-8編碼。
3. 數(shù)據(jù)庫(kù)中表的字段中存儲(chǔ)中文的部分,要設(shè)置為utf8_general_ci類(lèi)型。
4.PHP在連接數(shù)據(jù)庫(kù)操作時(shí),要設(shè)置操作的字段類(lèi)型為utf8,設(shè)置方法如下:
mysql_connect(’localhost’,'user’,'password’);mysql_select_db(’db’);mysql_query(”set names utf8;”); //**設(shè)置字符集***
解決亂碼有幾種方式:
在讀取數(shù)據(jù)庫(kù)的時(shí)候設(shè)置連接編碼:mysql_query("set names utf8");
在讀取數(shù)據(jù)庫(kù)的php文件的頭部加:header("Content-type:text/html;charset=utf-8");
php文件不是utf8格式的編碼,需要轉(zhuǎn)化。用notpad++文本編輯器打開(kāi)php文件,點(diǎn)擊菜單中的“格式”,查看是否是“以u(píng)tf8 無(wú)bom格式編碼”,不是的話(huà)請(qǐng)轉(zhuǎn)成此格式。
html格式的在頭部加上:meta http-equiv="Content-Type" content="text/html; charset=utf-8" /
你看看你的是哪一種情況,都對(duì)比做的一下,還不行在問(wèn)我。
只能說(shuō)你的php文件默認(rèn)編碼和你的數(shù)據(jù)庫(kù)編碼不同。你可以右鍵單擊你的工程文件-properites-text file encoding選擇和和你數(shù)據(jù)庫(kù)一樣的編碼就可以 了。
數(shù)據(jù)庫(kù)使用utf8編碼,需要在操作的過(guò)程中統(tǒng)一全部編碼。
1.數(shù)據(jù)庫(kù)默認(rèn)編碼
CREATE?DATABASE?`test`?DEFAULT?CHARACTER?SET?'utf8';
2.表默認(rèn)編碼
CREATE?TABLE?`tablea`(
`id`?INT?NOT?NULL?AUTO_INCREMENT,
`title`?VARCHAR(100)?NULL,
)ENGINE=InnoDB?DEFAULT?CHARSET=utf8;
3.字段默認(rèn)編碼
默認(rèn)情況下,字段的編碼同表的編碼,但是如果修改了表的編碼,字段編碼不會(huì)同步修改,需要手動(dòng)修改
這里修改編碼測(cè)試我將utf8 改為 gb2312? ,僅用于觀(guān)察修改后的情況(實(shí)際使用中可能是將gbk修改為utf8)
ALTER?TABLE?`test`.`tablea`?CHARACTER?SET?=?gb2312?;
--?修改表編碼后,查看建表語(yǔ)句
show?create?table?`tablea`;
--?可以看到輸出的建表語(yǔ)句中字段單獨(dú)設(shè)置了編碼
CREATE?TABLE?`tablea`(
`id`?INT?NOT?NULL?AUTO_INCREMENT,
`title`?VARCHAR(100)?CHARACTER?SET?utf8?NULL,
)ENGINE=InnoDB?DEFAULT?CHARSET=gb2312;
--?需要手動(dòng)修改字段編碼
ALTER?TABLE?`tablea`?
CHANGE?COLUMN?`title`?`title`?VARCHAR(100)?CHARACTER?SET?'gb2312'?NULL?DEFAULT?NULL?;
4.當(dāng)前數(shù)據(jù)庫(kù)連接的編碼
連接數(shù)時(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';");
通過(guò)以上幾步操作,基本可以保證數(shù)據(jù)庫(kù)使用過(guò)程中不會(huì)出現(xiàn)亂碼