資源描述:
《小談mysql字符集》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、小談MySQL字符集>>教育資源庫 首先,這片文章純粹是我的個(gè)人經(jīng)驗(yàn)之談,適用于我常見的環(huán)境及項(xiàng)目中. 個(gè)人建議,數(shù)據(jù)庫字符集盡量使用utf8(HTML頁面對(duì)應(yīng)的是utf-8),以使你的數(shù)據(jù)能很順利的實(shí)現(xiàn)遷移,因?yàn)閡tf8字符集是目前最適合于實(shí)現(xiàn)多種不同字符集之間的轉(zhuǎn)換的字符集,盡管你在命令行工具上可能無法正確查看數(shù)據(jù)庫中的內(nèi)容,我依然強(qiáng)烈建議使用utf8作為默認(rèn)字符集. 接下來是完整的一個(gè)例子: 1.創(chuàng)建數(shù)據(jù)庫表 mysql>CREATEDATABASEIFNOTEXISTSmy_dbdefaultcharsetu
2、tf8COLLATEutf8_general_ci; #注意后面這句話COLLATEutf8_general_ci,大致意思是在排序時(shí)根據(jù)utf8校驗(yàn)集來排序 #那么在這個(gè)數(shù)據(jù)庫下創(chuàng)建的所有數(shù)據(jù)表的默認(rèn)字符集都會(huì)是utf8了 mysql>createtablemy_table(namevarchar(20)notnulldefault'')type=myisamdefaultcharsetutf8; #這句話就是創(chuàng)建一個(gè)表了,制定默認(rèn)字符集為utf8 2.寫數(shù)據(jù) 例子1是通過php直接插入數(shù)據(jù):
3、a.php<?phpmysql_connect('localhost','user','passysql_select_db('my_db'); //請(qǐng)注意,這步很關(guān)鍵,如果沒有這步,所有的數(shù)據(jù)讀寫都會(huì)不正確的//它的作用是設(shè)置本次數(shù)據(jù)庫聯(lián)接過程中,數(shù)據(jù)傳輸?shù)哪J(rèn)字符集//其他編程語言/接口也類似,例如.c#/odbc//jdbc則設(shè)置連接字符串為類似jdbc:mysql://localhost/db?user=userpassp;useUnicode=truechar
4、acterEncoding=UTF-8 mysql_query(setnamesutf8;);//必須將gb2312(本地編碼)轉(zhuǎn)換成utf-8,也可以使用iconv()函數(shù)mb_convert_encoding(insertintomy_tablevalues('測(cè)試');,utf-8,gb2312);?> 例子是通過頁面提交插入數(shù)據(jù)2: b.php<?php//輸出本頁編碼為utf-8header(content-type:text/html;charset=utf-8); mysql_con
5、nect('localhost','user','passysql_select_db('my_db'); mysql_query(setnamesutf8;);if(isset($_REQUEST['name')){//由于上面已經(jīng)指定本頁字符集為utf-8了,因此無需轉(zhuǎn)換編碼mysql_query(sprintf(insertintomy_tablevalues('%s');,$_REQUEST['name']));} $
6、q=mysql_query(select*frommy_table);ysql_fetch_roetahttp-equiv=Content-Typecontent=text/html;charset=utf-8><formaction=method=post><inputtype=textname=namevalue=><inputtype=submitvalue='submit'></form> 自此,使用utf8字符集的完整的例子結(jié)束了. 如果你想使用gb
7、2312編碼,那么建議你使用latin1作為數(shù)據(jù)表的默認(rèn)字符集,這樣就能直接用中文在命令行工具中插入數(shù)據(jù),并且可以直接顯示出來.而不要使用gb2312或者gbk等字符集,如果擔(dān)心查詢排序等問題,可以使用binary屬性約束,例如: createtablemy_table(namevarchar(20)binarynotnulldefault'')type=myisamdefaultcharsetlatin1; 附1:舊數(shù)據(jù)升級(jí)辦法 以原來的字符集為latin1為例,升級(jí)成為utf8的字符集。原來的表:old_t
8、able(defaultcharset=latin1),新表:neysqldump--default-character-set=latin1-hlocalhost-uroot-Bmy_db--tablesold_table>o