MySQL字符集及MySQL编码转换
2007-12-13 09:42:22 / 个人分类:技术文档
个人建议,数据库字符集尽量使用utf8(utf-8),以使你的数据能很顺利的实现迁移,因为utf8字符集是目前最适合于实现多种不同字符集之间的转换的字符集,尽管你在命令行工具上无法正确查看数据库中的内容,我依然强烈建议使用utf8作为默认字符集.东北电力大学 频道家园 我们自己的博客(blog)空间!+f9Y#So&c)Q
M:u V
接下来是完整的一个例子:东北电力大学 频道家园 我们自己的博客(blog)空间!-aI~]!m.v
1.创建数据库表
#注意后面这句话 "COLLATE utf8_general_ci",大致意思是在排序时根据utf8编码格式来排序东北电力大学 频道家园 我们自己的博客(blog)空间!LA6z)n9B.j4i7k
#那么在这个数据库下创建的所有数据表的默认字符集都会是utf8了
#这句话就是创建一个表了,制定默认字符集为utf8
2.写数据东北电力大学 频道家园 我们自己的博客(blog)空间!{ Lhm(]:a
通过php直接插入数据:
mysql_connect('localhost','user','password');
\}:J4FP'q0mysql_select_db('my_db');
+X,p6fM*n)Wyn0
pfK.nP-p"d#fP(q0//请注意,这步很关键,如果没有这步,所有的数据读写都会不正确的东北电力大学 频道家园 我们自己的博客(blog)空间!(n#|TNAs-~
//它的作用是设置本次数据库联接过程中,数据传输的默认字符集东北电力大学 频道家园 我们自己的博客(blog)空间!VEN2B!@
mysql_query("set names utf8;");东北电力大学 频道家园 我们自己的博客(blog)空间!nf%?r4F:r)oJK)vs;g
东北电力大学 频道家园 我们自己的博客(blog)空间!o9E/O;eG3yv$J+x
//必须将gb2312(本地编码)转换成utf-8,也可以使用iconv()函数东北电力大学 频道家园 我们自己的博客(blog)空间!_5k&O!Z,O`H
mysql_query(mb_convet_encoding("insert into my_table values('测试');", "utf-8", "gb2312"));
c(E?!F y lx0?>
通过页面提交插入数据:
//输出本页编码为utf-8东北电力大学 频道家园 我们自己的博客(blog)空间!M@!E g]k p d"A
header("content-type:text/html; charset=utf-8");东北电力大学 频道家园 我们自己的博客(blog)空间!ND g BOW
(r|3[Tga,j0mysql_connect('localhost','user','password');
wO3xB{(K7`0mysql_select_db('my_db');
*l%wJ2RrFn0
+D8bd9s]!os IR0if(isset($_REQUEST['name'))
2C?}y8j[0{
+RZ^3H%x0D5Sx3Wrj0 //由于上面已经指定本页字符集为utf-8了,因此无需转换编码东北电力大学 频道家园 我们自己的博客(blog)空间!2xekR l tO
mysql_query(sprintf("insert into my_table values('%s');", $_REQUEST['name']));东北电力大学 频道家园 我们自己的博客(blog)空间!5S:B.Mch$x0pH I"u4?
}东北电力大学 频道家园 我们自己的博客(blog)空间!1k|*|^"lG:T5z
$[A8l'?$s lg0$q = mysql_query("select * from my_table");东北电力大学 频道家园 我们自己的博客(blog)空间!eo:C{'g$nnW
while($r = mysql_fetch_row($q))东北电力大学 频道家园 我们自己的博客(blog)空间!a(Ru \N
{东北电力大学 频道家园 我们自己的博客(blog)空间!r&wsiB
print_r($r);东北电力大学 频道家园 我们自己的博客(blog)空间!O$exaGx^
}
['^E"BDEJ0?>
_E5r R1^?M:]0东北电力大学 频道家园 我们自己的博客(blog)空间!.Z$[]&tky0E"zk
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">东北电力大学 频道家园 我们自己的博客(blog)空间!b0wTn0\n)Y!y
<form action="" method="post">
Xu$i2u3G#^5Poa$i0<input type="text" name="name" value="">东北电力大学 频道家园 我们自己的博客(blog)空间! `'uJ [uZF
<input type="submit" value='submit'>
3Mj { qL:|(w0</form>
自此,使用utf8字符集的完整的例子结束了.东北电力大学 频道家园 我们自己的博客(blog)空间!1XT"V@M|o:Y8N.T J
如果你想使用gb2312编码,那么建议你使用latin1作为数据表的默认字符集,这样就能直接用中文在命令行工具中插入数据,并且可以直接显示出来.而不要使用gb2312或者gbk等字符集,如果担心查询排序等问题,可以使用binary属性约束,例如:
附:旧数据升级办法东北电力大学 频道家园 我们自己的博客(blog)空间!Ci!`$[s5s
以原来的字符集为latin1为例,升级成为utf8的字符集。原来的表: old_table (default charset=latin1),新表:new_table(default charset=utf8)。东北电力大学 频道家园 我们自己的博客(blog)空间!#|'RTow["[F
第一步:导出旧数据
第二步:转换编码
在这里,假定原来的数据默认是gb2312编码。
@9t)f9LH q:R1T0第三步:导入
e]$[*E/~ Z*U{ f-T0修改old.sql,增加一条sql语句: "SET NAMES utf8;",保存。
大功告成!
推荐 收藏 导入论坛 等级(0) 编辑 管理 查看(14) 评论(0) 评分(0/0)
TAG: 技术文档