mysql中文乱码 简书_MySQL中文乱码

查看编码

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,转化过程就为不可逆的,破坏性的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值