解决MySql中文乱码

最近写了个数据上报统计的小东西,用的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.