MySQL数据库中文乱码的解决办法
MySQL的字符集和校对规则有4个级别的默认设置:服务器级、数据库级、表级和连接级。我们解决中文乱码的方法就顺着这几个级别来分别设置。比较常见的是由于没有设置连接级的字符集导致的乱码。
1、服务器级字符集
服务器级也就是当服务器启动时根据配置文件中的字符集来加载。当前的服务器字符集和校对规则可以用作character_set_server和collation_server系统变量的值。在运行时能够改变这些变量的值。针对服务器级,我们有两个方法可以解决。
a、重新编译MySQL
更改设定值的一个方法是通过重新编译。如果希望在从源程序构建时更改默认服务器字符集和校对规则,使用:--with-charset和--with-collation作为configure的参量。例如:
shell> ./configure --with-charset=utf8
b、不重新编译,只修改当前配置文件
打开/etc/mysql/my.cnf修改编码:
在[mysqld]下添加:default-character-set=utf8
在[client]下添加:default-character-set=utf8
在[mysql]下添加:default-character-set=utf8
然后重启mysql应该就可以了!
2、数据库级字符集
默认数据库的字符集和校对规则可以用作character_set_database和 collation_database系统变量。无论何时默认数据库更改了,服务器都设置这两个变量的值。如果没有 默认数据库,这两个变量与相应的服务器级别的变量(character_set_server和collation_server)具有相同的值。
a、重新建数据库,并指定默认字符集
数据库级是在新建数据库时指定该数据库默认的字符集。
mysql>create database db_name character set charset_name ;
比如:
mysql>create database db_name character set utf8 ;
b、不重新建数据库,通过alter database来修改数据库的默认字符集
如果之前在建表的时候没有指定character set charset_name,也可以通过以下重新指定: mysql>alter database db_name character set charset_name ;
比如:
mysql>alter database db_name character set utf8 ;
3、表级字符集
如果在表定义中没有指定表字符集和校对规则,则默认使用数据库字符集和校对规则。
a、重新建表,并指定默认字符集
表级字符集是在建立表的时候指定该表的默认字符集。
mysql>create table tbl_name (column_list) default character set charset_name ;
b、不重新建表,通过alter table来修改表的默认字符集
如果之前在建表的时候没有指定character set charset_name,也可以通过以下重新指定: mysql>alter table tbl_name default character set charset_name ;
备注:列级别的字符集和表级别字符集的规则类似,也可以在建表的语句里面指定,若没有指定则默认使用表级别的字符集,若表也没有指定默认字符集,则往上推。