最近写了个数据上报统计的小东西,用的PHP&MySql,输入输出都没有做任何编码设置,先开始输入输出都没有任何问题,但是在PHPMyAdmin中,发现中文是乱码,虽然似乎不影响实际输出,终究心里有点不舒服,刚好群里聊天有人问到这个问题,于是百度google了一下,应该是解决了这个问题.
1.首先创建数据库时需要做的操作:
最好是在创建数据库的时候直接指定编码:
方法1、
create database db_name default character set utf8
方法2、
create database db_name default charset=utf8
然而对于使用虚拟主机的用户来说,我们的MySql帐号是没有权限执行创建数据库的代码的,于是就只能在管理页面创建数据库(通常他不提供设置编码的选项)后执行修改数据库编码的指令:
alter database db_name default character set utf8;
—————————————
还可以创建表的时候指定表的编码:
方法1、
create table table_name
(
……//字段信息
)default character set utf8;
方法2、
create table table_name
(
……//字段信息
)default charset=utf8;
同样提供修改表table的编码的指令:
alter table table_name default character set utf8
——————————————————-
创建表时设定字段属性:
create table table_name
(
filed_name varchar(20) character set utf8
);
修改字段编码:
alter table table_name change old_filed_name new_filed_name varchar(20) not null default ‘123’ character set utf8;
//将 table_name表的old_filed_name字段的字段名修改为new_filed_name,类型varchar(20),不为空,默认值123,编码utf8
modify只能修改字段属性,change可以修改字段名。
———————————————————-
2.然后是前台输出要进行的操作:
连接数据库要输出时需要设置编码:
mysql_query(“set names ‘utf8′”);
//set names 设置的编码不需要与前台页面的字符编码一致,即使你的前台页面编码错误导致乱码,但只要set names设置的编码与数据库的编码一致,那么从数据库读出来的数据就不会乱码(也有说这个要和前台一致,但是道理上说不通,没理由要求前台页面编码和数据库编码一致,另外我测试的结果就是只要set names正确,就不会乱码,无关前台页面编码)。
//set names 应该在执行sql查询前执行,一个连接执行一次就够了,写在mysql_connect或mysql_select_db后面就行了.
//建议数据库编码使用utf8.