查看编码
show variables like 'character%';
修改编码
mysql> SET character_set_client = utf8 ;
mysql> SET character_set_connection = utf8 ;
mysql> SET character_set_database = utf8 ;
mysql> SET character_set_results = utf8 ;
mysql> SET character_set_server = utf8 ;
这种方式修改重启之后就会复原,不推荐
修改配置文件的编码
修改/etc/my.cnf配置文件,在[mysqld]下添加编码配置,如下所示:
[mysqld]
character_set_server=utf8
init_connect='SET NAMES utf8'
[client]
default-character-set = utf8
如果找不到 /etc/my.conf 就去偷一份过来
cp /usr/share/mysql/my-default.cnf /etc/
mv /etc/my-default.cnf /etc/my.cnf
这句话是用来修改数据库表大小写敏感问题,一般数据库表明都使用小写加下划线链接,养成好习惯
echo lower_case_table_names=1 >>/etc/my.cnf
之前遇到的问题,mysql编码设置都正常了,但是写入的中文还是会转换成乱码
原因:使用PDO写入的时候指定charset=utf8 失败
本来是使用 dsn直接定义编码格式
$mysqldsn="mysql:host=localhost;dbname=vip;charset=utf8";
但是当排除所有的可能,那么就只剩下一开始就本以为设置正确的你了
换种方式重新设置字符集
$sql=" set names utf8 ";
$pdo->exec($sql);
测试发现 原因就在这里 (一早上就被你给坑了)
很气,但是也学到了,mysql编码的流程
set names utf8 等同于设置
set character_set_client = utf8
set character_set_results = utf8
set character_set_connection = utf8
信息输入的编码流程
输入: client -> connection -> server;
输出: server ->connection ->results;
每一次 -> 传输都会进行一次编码的转换(一共是三次,最终显示会再 一次转换)
以出现乱码的输出为例,server里utf8的数据,传入connection转为latin1,传入results转为latin1,utf-8页面又把results转过来。如果两种字符集不兼容,比如latin1和utf8,转化过程就为不可逆的,破坏性的。