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";
MySQL乱码问题以及utf8mb4字符集的更多相关文章
- MySQL乱码问题以及utf8mb4字符集---utf8mb4和utf8有什么区别? emoji表情与utf8mb4
utf8mb4兼容utf8,且比utf8能表示更多的字符. 关于emoji表情的话mysql的utf8是不支持,需要修改设置为utf8mb4,才能支持, 因为utf8mb4是utf8的超集
- emoji和utf8mb4字符集
mysql 的 utf8 不支持 emoji,需要修改设置为utf8mb4 <?php 'mysql' => [ 'charset' => 'utf8mb4', 'collation ...
- MySQL中 utf8与utf8mb4的区别
MySQL中 utf8与utf8mb4的区别 一.简介 MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode.好在 ...
- mysql 版本引起的 utf8mb4 问题(linux centos6.9下升级mysql)
文字输入时候存在火星文或者表情,insert到低版本的mysql中一般会报错,所以我们需要将mysql版本升级到5.5.3及以上,高版本的mysql为我们提供了utf8mb4的编码,解决了这些复杂数据 ...
- 微信nickname乱码(emoji)及mysql编码格式设置(utf8mb4)解决的过程
转:https://segmentfault.com/a/1190000004594385 项目中涉及保存微信的nickname,之前一直正常使用,但是突然遇到一个之前没有遇到的问题.经过调试发现错误 ...
- 8、mysql乱码问题及字符集实战
8.1.mysql插入中文数据乱码案例: mysql建库的字符集为latin1,客户端的字符集为utf8; use lc; 1.查看库的编码: mysql> show create databa ...
- 微信nickname乱码及mysql编码格式设置(utf8mb4)
微信nickname乱码及mysql编码格式设置(utf8mb4) 今天在写微信公众平台项目时,写到一个用户管理模块,接口神马的已经调试好了,于是将用户从微信服务器保存到本地数据库,发现报错: jav ...
- 字符集更改步骤,mysql乱码
关键字:Mysql乱码,mysql字符集修改 #字符集更改步骤~
- MySQL 解决 emoji表情 的方法,使用utf8mb4 字符集(4字节 UTF-8 Unicode 编码)
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Neue'; color: #454545} span.s1 {font: ...
随机推荐
- jQuery~DOM基础操作
操作DOM 1.什么是DOM:document object model文档对象模型 2.树形结构 3.什么是节点(node):DOM结构中最小单位,元素.文本.属性...创建节点 var $div ...
- Windows下PyInstaller的使用教程
直接使用Python开发的软件时有许多不方便的地方,如需要安装特定的Python环境,需要安装依赖库.为了便于部署,需要将Python源代码编译成可执行文件,编译后的可执行文件就能脱离python环境 ...
- MySQL中EXPLAIN解释命令 查看索引是否生效
explain显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句. 使用方法,在select语句前加上explain就可以了: 如: expla ...
- k8s 使用 traefik 将clusterIP的 svc 暴露服务的方法
0. 前置条件 安装好k8s.. traefik的简介图 1. 安装 traefik 方法: 创建一个目录 并且存放部分文件等. mkdir /traefik cd /traefik git clon ...
- Spring之AOP实现原理
- 【codeforces666E】Forensic Examination 广义后缀自动机+树上倍增+线段树合并
题目描述 给出 $S$ 串和 $m$ 个 $T_i$ 串,$q$ 次询问,每次询问给出 $l$ .$r$ .$x$ .$y$ ,求 $S_{x...y}$ 在 $T_l,T_{l+1},...,T_r ...
- Codeforces - 1020B Badge(找环)
题意: 以每个点为起点,找到第一个出现两次的点 解析: 我是先找出来所有的环 环上的点找出来的肯定是自己 bz[i] = i; 然后去遍历不在环上的点j 如果通过这个点找到一个已经标记的的点i ...
- hdwiki 参考资料改成可点击跳转的(默认不能点)
(1)首先在view这个文件夹找到viewdoc.htm文件.(2)在viewdoc.htm源码中搜索“<dd> <span>[{eval echo ($i+1)}]”找到下面 ...
- 【Luogu P4149】[IOI2011]Race(点分治)
自闭了几天后的我终于开始做题了..然后调了3h一道点分治板子题,调了一天一道IOI... 最后还是自己手造数据debug出来的... 这题一看:树上路径问题,已知路径长度求balabala,显然是点分 ...
- 离线安装MySQL5.7
无网络环境下安装MySQL5.7 前提: 1.系统环境:CentOS 7 64bit 2.需要的rpm包已经在本地 安装: 1.下载需要的rpm包: mysql-community-client-5. ...