暂时没什么想说的.哈哈!

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.创建数据库表

mysql>CREATE DATABASE IF NOT EXISTS my_db default charset utf8 COLLATE utf8_general_ci;

#注意后面这句话 "COLLATE utf8_general_ci",大致意思是在排序时根据utf8编码格式来排序东北电力大学 频道家园 我们自己的博客(blog)空间!L A6z)n9B.j4i7k
#那么在这个数据库下创建的所有数据表的默认字符集都会是utf8了

mysql>create table my_table (name varchar(20) not null default '')type=myisam default charset utf8;

#这句话就是创建一个表了,制定默认字符集为utf8

2.写数据东北电力大学 频道家园 我们自己的博客(blog)空间!{ Lhm(]:a
通过php直接插入数据:

<?php东北电力大学 频道家园 我们自己的博客(blog)空间!q{2S&K:ElT$f^
mysql_connect('localhost','user','password');
\}:J4FP'q0
mysql_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
?>

通过页面提交插入数据:

<?php东北电力大学 频道家园 我们自己的博客(blog)空间!O Lus$ixE
//输出本页编码为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%w J2RrFn0
+D8bd9s]!osIR0if(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$x0pHI"u4?
}东北电力大学 频道家园 我们自己的博客(blog)空间!1k|*| ^"l G:T5z

$[A8l'?$slg0$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"B DEJ0?>
_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#^5Po a$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属性约束,例如:

create table my_table ( name varchar(20) binary not null default '')type=myisam default charset latin1;

附:旧数据升级办法东北电力大学 频道家园 我们自己的博客(blog)空间!Ci!`$[s5s
以原来的字符集为latin1为例,升级成为utf8的字符集。原来的表: old_table (default charset=latin1),新表:new_table(default charset=utf8)。东北电力大学 频道家园 我们自己的博客(blog)空间!#|'R Tow["[F
第一步:导出旧数据

mysqldump --default-character-set=latin1 -hlocalhost -uroot -B my_db --tables old_table > old.sql

第二步:转换编码

iconv -t utf-8 -f gb2312 -c old.sql > new.sql

在这里,假定原来的数据默认是gb2312编码。
@9t)f9LH q:R1T0第三步:导入
e]$[*E/~Z*U{f-T0修改old.sql,增加一条sql语句: "SET NAMES utf8;",保存。

mysql -hlocalhost -uroot my_db < new.sql

大功告成!


TAG: 技术文档

我来说两句

-5 -3 -1 - +1 +3 +5

Open Toolbar