mysql4.1以后版本都支持多字符集的支持,但是安装默认的字符集竟然是 latin1这个瑞典文,所以很多人想安装discuz等论坛为gbk、utf-8等字符集的论坛就出现了一些问题。最近我在网上找了一些资料,加上自己又专门在一台linux服务器上试验了两天的经历,基本解决了字符集的问题,现将我的心得写出来,供广大网游参考。
一、原理篇: mysql服务器中有六个关键位置使用了字符集的概念,他们是:client 、connection、database、results、server 、system。 a、其中client是客户端使用的字符集,相当于网页中的字符集设置如下
CREATE DATABASE `database` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE DATABASE `database` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
(2)客户端php程序使用如下方法设定连接所使用的字符集:
1. <?php
2. mysql_connect('localhost','user','password');
3. mysql_select_db('my_db');
4.
5. //请注意,这步很关键,如果没有这步,所有的数据读写都会不正确的
6. //它的作用是设置本次数据库联接过程中,数据传输的默认字符集
7. mysql_query("set names utf8;");
8.
9. //必须将gb2312(本地编码)转换成utf-8,也可以使用iconv()函数
10. mysql_query(mb_convet_encoding("insert into my_table values('测试');", "utf-8", "gb2312"));
11. ?>
(3)如果你想使用gb2312编码,那么建议你使用latin1作为数据表的默认字符集,这样就能直接用中
文在命令行工具中插入数据,并且可以直接显示出来.而不要使用gb2312或者gbk等字符集,如果担心查询
排序等问题,可以使用binary属性约束,例如:
create table my_table ( name varchar(20) binary not null default '')type=myisam default charset latin1;
自此,使用utf8字符集的完整的例子结束了。
三、旧数据升级办法
(1) 导出数据库: mysqldump -uroot -p123456 --default-character-set=latin1 --set-charset=utf8 --opt olddatabase > newdatabase.sql
(2) 修改newdatabase.sql,在文件开头增加一条sql语句: “SET NAMES utf8;“,保存。
(3)mysql -hlocalhost -uroot my_db < newdatabase.sql