你建立的表字段的編碼是什么編碼呢?mysql的編碼分為兩種,一種是客戶端編碼,這個(gè)可以通過(guò)set names GBK(utf8);來(lái)改變;這句話的意思是告訴mysql服務(wù)器,你的客戶端使用的是什么編碼。另一種是數(shù)據(jù)在庫(kù)中存儲(chǔ)時(shí)使用的編碼,這個(gè)編碼可以在安裝mysql建立數(shù)據(jù)庫(kù),建立表的時(shí)候選擇,以建表時(shí)的選擇為最后標(biāo)準(zhǔn),若果沒(méi)選擇,默認(rèn)繼承安裝時(shí)的選擇。你說(shuō)的插入成功卻是空行的原因,可能是因?yàn)榘惭b時(shí)選擇的編碼里面,對(duì)漢字的編碼支持的太少,因此出現(xiàn)這樣的情況,建議:show create table table_name;查看下建表語(yǔ)句中的字符集。最好修改成utf8。這樣適應(yīng)能力強(qiáng)一些!
成都創(chuàng)新互聯(lián)不只是一家網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司;我們對(duì)營(yíng)銷、技術(shù)、服務(wù)都有自己獨(dú)特見(jiàn)解,公司采取“創(chuàng)意+綜合+營(yíng)銷”一體化的方式為您提供更專業(yè)的服務(wù)!我們經(jīng)歷的每一步也許不一定是最完美的,但每一步都有值得深思的意義。我們珍視每一份信任,關(guān)注我們的成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)質(zhì)量和服務(wù)品質(zhì),在得到用戶滿意的同時(shí),也能得到同行業(yè)的專業(yè)認(rèn)可,能夠?yàn)樾袠I(yè)創(chuàng)新發(fā)展助力。未來(lái)將繼續(xù)專注于技術(shù)創(chuàng)新,服務(wù)升級(jí),滿足企業(yè)一站式成都全網(wǎng)營(yíng)銷需求,讓再小的品牌網(wǎng)站制作也能產(chǎn)生價(jià)值!
php+mysql數(shù)據(jù)時(shí)我們必須保證提交到數(shù)據(jù)庫(kù)的編碼與mysql編碼是一致的這樣才可以保存中文不出現(xiàn)問(wèn)號(hào)亂碼問(wèn)題,下面我先整理兩個(gè)讓mysql與頁(yè)面保證編碼一致的方法。
解決中文插入數(shù)據(jù)庫(kù)亂碼的方法:
直接把中文轉(zhuǎn)變成utf-8格式,大多是這個(gè)問(wèn)題導(dǎo)致的。
代碼如下復(fù)制代碼
$str
=
iconv('gbk','utf-8',$str);
如果還不行檢查網(wǎng)頁(yè)編碼是否正確:
代碼如下復(fù)制代碼
?php
header("Content-Type:text/html;charset=utf-8");
?
建表:
代碼如下復(fù)制代碼
Create
TABLE
`net_city`
(
`cityid`
smallint(4)
NOT
NULL
auto_increment,
`cityname`
varchar(80)
NOT
NULL
default
'',
`provinceid`
smallint(2)
NOT
NULL
default
'0',
`inarea`
varchar(5000)
NOT
NULL
default
'',
`outarea`
varchar(5000)
NOT
NULL
default
'',
`tel`
varchar(400)
NOT
NULL
default
'',
PRIMARY
KEY
(`cityid`)
)
ENGINE=MyISAM
DEFAULT
CHARSET=utf8;
PHP里的代碼:
$conn=mysql_connect("localhost",
"用戶名",
"密碼");
mysql_query("set
names
'utf8'",$conn);
mysql_select_db("
數(shù)據(jù)名",$conn);
$exec="insert
into
net_city
(cityname,inarea,outarea,tel)
values
('".$link_cityname."','".$link_inarea."','".$link_outarea."','".$link_tel."')";
$result=mysql_query($exec,$conn);
if($result){
echo
"1";
}else{
echo
"0";
}
mysql_close($conn);
后來(lái)我試了試全部都用成gbk的,也是可以的~
在查詢數(shù)據(jù)時(shí)我們直接使用mysql_query()來(lái)設(shè)置
mysql_query("SET
NAMES
GBK");
//GBK處為編碼設(shè)置
例子
下面是
"insert.php"
頁(yè)面的代碼:
代碼如下復(fù)制代碼
?php$con
=
mysql_connect("localhost","peter","abc123");
if
(!$con)
{
die('Could
not
connect:
'
.
mysql_error());
}
mysql_select_db("my_db",
$con);
mysql_query("SET
NAMES
GBK");
//GBK處為編碼設(shè)置
$sql="INSERT
INTO
person
(FirstName,
LastName,
Age)VALUES('$_POST[firstname]','$_POST[lastname]','$_POST[age]')";
if
(!mysql_query($sql,$con))
{
die('Error:
'
.
mysql_error());
}
echo
"1
record
added";
mysql_close($con)
?
數(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? ,僅用于觀察修改后的情況(實(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)亂碼