通过MySQL的命令行即可以查看数据库、数据表的编码信息。
1.查看数据库编码格式
show variables like 'character_set_database';
2.查看数据表的编码格式
show create table <表名>;
编码格式的正确与否,影响着数据库中的数据(尤其是中文数据)能否正常显示。当出现乱码时,就需要通过上述方式查看编码是否设置正确,然后根据需要进行编码的修改。对于MySQL中编码的修改有如下方法:
1.修改数据库编码格式
alter database <数据库名> character set utf8;
2.修改数据表的编码格式
alter table <表名> character set utf8;
3.服务器读取数据库为乱码时可能要修改的编码
set names utf8;
此句等价于执行:SET character_set_client = utf8;SET character_set_results = utf8;SET character_set_connection = utf8;
上面3个变量在获取数据库数据中起着转化编码的作用。
服务器端查询数据库需要经历两个过程
信息输入:client→connection→server;
信息输出:server→connection→results。
每个路径要经过3次改变字符集编码。举一个出现乱码输出的示例,server里utf8的数据,传入connection转为latin1,传入results转为latin1,utf-8页面又把results转过来。如果两种字符集不兼容,比如latin1和utf8,这样就会出现乱码,并且转化过程就为不可逆的,一经转换就无法恢复。
还要声明一点,“SET NAMES UTF8”作用只是临时的,MySQL重启后就恢复默认了。