mysql乱码utfmb4_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";

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值