程序员

MySQL字符集,永恒的痛

作者:admin 2021-04-22 我要评论

本文转载自微信公众号「虞大胆的叽叽喳喳」,作者虞大胆。转载本文请联系虞大胆的叽叽喳喳公众号。 最近迁移mysql和升级mysql版本,遇到了很多乱码(主要是表情问...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

本文转载自微信公众号「虞大胆的叽叽喳喳」,作者虞大胆。转载本文请联系虞大胆的叽叽喳喳公众号。 

最近迁移mysql和升级mysql版本,遇到了很多乱码(主要是表情问题)问题,所以记录下。

mysql字符集分别支持四种级别的字符集和对应的比较规则,比如服务器级别的是character_set_server,数据库级别的是character_set_database,表级别和列级别也可以设置字符集,比如:

  1. create database test  CHARSET set utf8mb4 COLLATE utf8_general_ci 

另外字符集比较也要遵循规则,比较常用的比较规则是utf8_general_ci。

一般服务器启动的时候配置:

  1. [mysqld] 
  2. character_set_server = utf8mb4 

在安装和创建库表的时候,尽量使用utf8mb4字符集。

对于客户端(比如程序驱动、mysql工具集)有三个和字符集有关的系统变量,分别是character_set_client,character_set_connection,character_set_results,用于客户端编码解码,并和数据库交互。

这三个参数其实通过default-character-set或set names一次性指定。

具体遇到的问题分别是:

1:mysql导入导出的指定default-character-set为utf8mb4,或者会出现乱码。

2:服务器级别的字符集配置为utf8mb4,库、表、列即使不指定,也会继承服务器级别的配置。

3;mysql工具集,尽量显示指定—default-character-set字符集,比如:

  1. [client] 
  2. default-character-set=utf8mb4 
  3. [mysql] 
  4. default-character-set=utf8mb4 

4:如果有proxy,一定要在proxy上指定字符集

5:如果不知道有没有问题,通过phpmyadmin查看和修改,尤其查看其具体执行的mysql语句。

6:编译的时候指定字符集,比如:

  1. cmake -DDEFAULT_CHARSET=utf8mb4 -DEXTRA_CHARSETS=all  -DDEFAULT_COLLATION=utf8mb4_general_ci 

参考:https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html


本文转载自网络,原文链接:https://mp.weixin.qq.com/s/lYurkVL2AdtzQFGbGMtutA

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • MySQL字符集,永恒的痛

    MySQL字符集,永恒的痛

  • 线上MySQL千万级大表,如何优化?

    线上MySQL千万级大表,如何优化?

  • 十分钟入门Fink SQL

    十分钟入门Fink SQL

  • “大数据”行业风口来临,源于数据分析

    “大数据”行业风口来临,源于数据分析

腾讯云代理商
海外云服务器