• MySQL乱码问题以及utf8mb4字符集


    MySQL乱码问题以及utf8mb4字符集

    1.乱码

    推荐大家看 深入MySQL字符集设置 ,区分检查client端、server端的编码;最简单暴力的方式,是在所有的环节都显式明确的指定相同的编码,包括ssh客户端也指定为相同编码。

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

    emoji表情与utf8mb4

    关于emoji表情的话mysql的utf8不支持,需要修改设置为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能表示更多的字符。

    2.修改方法


    服务器端

    修改数据库配置文件/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 with character_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编码读取产生任何问题。

    3.创建数据库编码为utf8mb4字符集为utf8mb4_unicode_ci的方法:


    CREATE DATABASE testdb charset utf8mb4 COLLATE utf8mb4_unicode_ci;
    grant select,insert,update on testdb.* to test@'%' identified by "test"; 

  • 相关阅读:
    联想顶级移动工作站ThinkPad P16发布,配置拉满,起售价1979美元
    男士美容,这些方面你做了没? 生活至上,美容至尚!
    一起学习手撕包菜如何做 生活至上,美容至尚!
    男士美容护肤家庭自用法 生活至上,美容至尚!
    “皮蛋瘦肉粥”2种详细做法[图] 生活至上,美容至尚!
    简单实用的男士护肤法 生活至上,美容至尚!
    养颜排毒女人注意的几个方面 生活至上,美容至尚!
    八种不要钱的男士护肤方法 生活至上,美容至尚!
    ArcGIS拓扑:检查的流程,以面重叠检查为例
    ERROR 010067: Error in executing grid expression.
  • 原文地址:https://www.cnblogs.com/reblue520/p/6239709.html
Copyright © 2020-2023  润新知