MySQL最新资讯
  • [MySQL最新资讯]MySQL在并发情况下的问题及如何解决
  • [MySQL最新资讯]Microsoft Azure Cosmos DB  — 微软的多模式数据库
  • [MySQL最新资讯]Cloud Spanner  —  Google 全球分布式关系数据库
  • [MySQL最新资讯]YugaByte  —  一个开源的云原生数据库
  • [MySQL最新资讯]Peloton  —  一个自驱动的 SQL DBMS
  • [MySQL最新资讯]JanusGraph  —  一个基于 Java 的分布式图形数据库
  • [MySQL最新资讯]Memgraph  —  一个高性能、可内存驻留的图形数据库
  • [MySQL最新资讯]腾讯云 CDB for MySQL 使用规范指南
  • [MySQL最新资讯]Mysql实时备份实现方法
  • [MySQL最新资讯]mysql workbench是什么
  • [MySQL最新资讯]在PHP中的SQL语句快速入门
  • [MySQL最新资讯]使用MySQL数据库的23个注意事项
  • [MySQL最新资讯]mysql 常用命令用法总结
  • [MySQL最新资讯]windows下mysql忘记root密码的解决方法
  • [MySQL最新资讯]远程访问MySQL数据库的三种解决方法
  • [MySQL最新资讯]MySQL 1303错误的解决方法(navicat)
  • [MySQL最新资讯]MySQL数据库如何换挡加速
  • [MySQL最新资讯]将MySQL数据库移植为PostgreSQL
  • [MySQL最新资讯]老程序员写sql语句的经验之谈
  • [MySQL最新资讯]MySQL utf8mb4字符集以及乱码问题的解决方法
  • [MySQL最新资讯]解决hibernate+mysql写入数据库乱码的方法
  • 直达腾讯云服务器
    腾讯云服务器,数据库,短信等热销产品限量秒杀;新购爆款3折起;
    腾讯云数据库MySQL入门机型仅12元/月
    腾讯云云服务器新购特惠,最低2折起,1核1G3年仅794.73元,即0.73元/日。
    腾讯云国际顶级CA机构SSL证书8.8折,云解析买一年最高送半年!
    腾讯云为数百万企业和开发者提供安全、稳定的云服务器、云数据库、CDN等云服务
    腾讯云服务器安全可靠高性能,多种配置供您选择
    腾讯云数据库性能卓越稳定可靠,为您解决数据库运维难题
    阿里云服务器入口
    180天免费用腾讯云服务器马上领取
    您当前位置:狗鱼MySQL教程 >> MySQL最新资讯 >> MySQL utf8mb4字符集以及乱码问题的解决方法
    MySQL utf8mb4字符集以及乱码问题的解决方法
    更新日期: 2018年06月05日 来源: 本站原创 作者: 佚名 阅读:
    上一篇老程序员写sql语句的经验之谈 下一篇:解决hibernate+mysql写入数据库乱码的方法
    Mysql utf8mb4字符集以及乱码问题的解决方法
     


    emoji表情与utf8mb4

     

    关于emoji表情的话mysql的utf8是不支持,需要修改设置为utf8mb4,才能支持, 详细emoji表情与utf8mb4的关系 。

    MYSQL 5.5 之前, UTF8 编码只支持1-3个字节,只支持BMP这部分的unicode编码区, BMP是从哪到哪,到http://en.wikipedia.org/wiki/Mapping_of_Unicode_characters 这里看,基本就是0000~FFFF这一区。 从MYSQL5.5开始,可支持4个字节UTF编码utf8mb4,一个字符最多能有4字节,所以能支持更多的字符集。

    utf8mb4 is a superset of utf8

    utf8mb4兼容utf8,且比utf8能表示更多的字符。
     

    修改方法

     

    服务器端

     

    修改数据库配置文件/etc/my.cnf

    character-set-server=utf8mb4
    collation_server=utf8mb4_unicode_ci

    重启MySQL(按照官方文档,这两个选项都是可以动态设置的,但是实际的经验是Server必须重启一下)

    已有的表修改编码为utf8mb4

    ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;

    使用下面这个语句只是修改了表的default编码

    ALTER TABLE etape_prospection CHARSET=utf8;
     

    客户端

     

    jdbc的连接字符串不支持utf8mb4,这个 这种方式 来解决的,如果服务器端设置了character_set_server=utf8mb4,则客户端会自动将传过去的utf-8视作utf8mb4。

    • Connector/J did not support utf8mb4 for servers 5.5.2 and newer.

      Connector/J now auto-detects servers configured withcharacter_set_server=utf8mb4 or treats the java encoding utf-8 passed using characterEncoding=... as utf8mb4 in the SET NAMES= calls it makes when establishing the connection. (Bug #54175)

    其他的client端,比如php、python需要看下client是否支持,如果不能在连接字符串中指定的话,可以在获取连接之后,执行”set names utf8mb4″来解决这个问题;

    因为utf8mb4是utf8的超集,理论上即使client修改字符集为utf8mb4,也会不会对已有的utf8编码读取产生任何问题。
     

    乱码

     

    推荐大家看 html" rel="nofollow,noindex" target="_blank">深入MySQL字符集设置 ,区分检查client端、server端的编码;最简单暴力的方式,是在所有的环节都显式明确的指定相同的编码。

     

    比如使用python的MySQLdb连接MySQL时默认的charset是latin1,需要自己指定charset=’utf8′,即使是在服务器端的init-connect=’SET NAMES utf8′,MySQLdb也会使用latin1覆盖该选项;

     

    感觉本站内容不错,读后有收获?

    我要小额赞助,鼓励提供更好的内容教程

    上一篇老程序员写sql语句的经验之谈 下一篇:解决hibernate+mysql写入数据库乱码的方法
    Copyright 2013-2017 Powered by 狗鱼MySQL教程,All Rights Reserved.
    广州相如计算机科技有限有限公司 版权所有 粤ICP备08130661号-4
    售前咨询:020-38667011 手机:13711588918