关于MySql字符集编码问题

关于数据库字符集编码

假如客户端使用的是utf-8字符集,而数据库使用的是gbk字符集。现在客户端生成的所有sql操作语句都是utf-8的,导致数据库认为插入和修改的语句是gbk编码而乱码或失败,也导致查询时数据库返回gbk字符集编码客户端展示乱码。

所以需要针对客户端或数据库设置字符集编码,通常有3种方式

1、修改数据库字符集与客户端一致

2、修改客户端字符集与数据库一致

3、设置客户端与数据库连接session在session中指定客户端字符集让数据库转码

mysql、oracle、sqlserver等数据库普遍都会设置sql语句输入字符集和结果输出字符集,不同的是mysql比其他数据库多了一个校对字符集编码collation(后面解释什么是校对字符集编码)。

mysql使用字符集的优先级

mysql与其他数据库不同的是可以单独为表中的每一列指定字符集编码。字符集校对collation主要是限定列的条件筛选查询与列的排序,对列设定的字符集会影响到查询条件大小写是否敏感以及排序的先后顺序。

selct * from users where name like binary '%小鱼%';

一条sql语句在数据库执行最终使用的字符集编码会按照优先级的方式选定

  1. 如果sql语句中包含了针对某列字段的字符集限定就会首选sql语句中指定字符集如以上语句针对“name 告诉数据库客户端是使用的是 binary 字符集与排序”;

  2. 如果未在sql语句中没有限定字符集就使用创建表时指定的列字符集与排序;

  3. 如果列未指定字符集就使用表的字符集与排序;

  4. 如果表未指定字符集就使用数据库的字符集与排序;

  5. 如果数据库未指定字符集就使用连接session中指定的字符集与排序;

  6. 如果连接session中未指定字符集就使用服务器的字符集

新建数据库时的collation选择参考

https://www.cnblogs.com/sonofelice/p/6432986.html

各个层级字符集说明

https://blog.csdn.net/sun8112133/article/details/79921734

查看和修改数据库字符集

https://www.cnblogs.com/liaohui5/p/10581554.html
也可在创建数据库和表的时候指定
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值