mysql utf8mb4编码设置

原创 2016年05月30日 17:37:06

1.字符集及字符集校对规则说明:

  字符集(CharacterSet)和校对规则(Collation)。
  字符集和校对规则有4个级别的默认设置:服务器(server),数据库(database),数据表(table)和连接(connection)。
  MySQL中是根据下面几个变量确定服务器端和客户端用的什么字符集:
  character_set_client    客户端字符集
  character_set_connection  客户端与服务器端连接采用的字符集
  character_set_results    SELECT查询返回数据的字符集
  character_set_system       
  character_set_database   数据库采用的字符集


2.MySQL的字符集处理规则:
发送请求:
  1)客户端发送请求到服务器端。
  2)服务器端会把请求的数据从客户端字符集(character_set_client)转成服务器连接字符集(character_set_connection)。
  3)然後服务器会检测存储区域(table,column)的字符集,然后把数据从连接字符集(character_set_connection)转为存储区域(table,column)的字符集,然後再存储或者查询。
返回请求:
  1)服务器将存储区域(table,column)的字符集转换成服务器连接字符集(character_set_connection)。
  2)将服务器连接字符集(character_set_connection)转换成结果字符集(character_set_results),再发送到客户端。
 
3.查看和修改字符集编码及校对规则:
  1)查看:
root@localhost : (none) 09:40:20> show variables like 'character%';
+--------------------------+----------------------------------+
| Variable_name            | Value                            |
+--------------------------+----------------------------------+
| character_set_client     | utf8                             |
| character_set_connection | utf8                             |
| character_set_database   | utf8                             |
| character_set_filesystem | binary                           |
| character_set_results    | utf8                             |
| character_set_server     | utf8                             |
| character_set_system     | utf8                             |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------------+


mysql> show variables like 'collation_%';  
 +----------------------+-----------------+  
 | Variable_name         | Value            |  
 +-----------------------+-----------------+  
 | collation_connection  | utf8_general_ci |  
 | collation_database    | utf8_general_ci |  
 | collation_server      | utf8_general_ci |  
 +----------------------+-----------------+  
 
  2)修改默认字符集方法:
修改/etc/my.cnf文件中的相关参数,并重启动数据库;
[client]
loose_default-character-set=utf8mb4
[mysqld]
default-character-set=utf8mb4
character_set_server=utf8mb4
collation=utf8mb4_general_ci
[mysqldump]
character-set-server=utf8mb4
[mysql]
default-character-set=utf8mb4


  3)验证修改后是否生效规则:
mysql> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8mb4                    |
| character_set_connection | utf8mb4                    |
| character_set_database   | utf8mb4                    |
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb4                    |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
 
4.set names的作用
set names实际上就是同时设置了character_set_client,character_set_connection,character_set_results这三个系统变量。
如在mysql命令行上输入 set names 'utf8mb4' 命令等同于:
SET character_set_client = utf8mb4;  
SET character_set_connection = utf8mb4;  
SET character_set_results = utf8mb4;  


5.总结:总结为以下四点:
  1)要保证数据库中存的数据与数据库编码一致,即数据编码与character_set_database一致。
  2)要保证通讯的字符集与数据库的字符集一致,即character_set_client,character_set_connection与character_set_database一致。
  3)要保证SELECT的返回与程序的编码一致,即character_set_results与程序编码一致。
  4)要保证程序编码与浏览器编码一致,即程序编码与<meta http-equiv="Content-Type" content="text/html; charset=?" />一致。


6.其他说明:
 1)支持utf8mb4的mysql版本:mysql5.3
 2)支持utf8mb4的jdbc版本:5.1.31


【解决方案 二】---设置mysql5.7编码集为utf8mb4

最近遇到一个问题,移动端的表情或者一些emoji是4字节的,但是utf-8是3字节的,查了很多网上的解决方法,最后提供一套自己的解决方案。如果当前的困境是:自己的mysql版本为5.5.3以前(版本为...
  • sinat_33087001
  • sinat_33087001
  • 2017年06月14日 20:09
  • 2058

MySQL数据库字符集由utf8修改为utf8mb4一例

 对于mysql 5.5 而言,如果不设定字符集,mysql默认的字符集是 latin1 拉丁文字符集; 为了统一管理和应用开发的方便,一般都会统一将操作系统,客户端,数据库各方面的字符集都设...
  • yumushui
  • yumushui
  • 2015年10月15日 15:51
  • 10103

MySQL设置utf8mb4编码

有一个项目需要存储ios的表情(emoji表情) 这种表情虽然是utf8编码,但是一个字符需要占用4个字节,而MySQL utf8编码只能存放3字节的字符。 在MySQL 5.6中,可以设置编码为u...
  • spring_0534
  • spring_0534
  • 2016年11月25日 11:34
  • 3092

更改MySQL数据库的编码为utf8mb4

utf-8编码可能2个字节、3个字节、4个字节的字符,但是MySQL的utf8编码只支持3字节的数据,而移动端的表情数据是4个字节的字符。如果直接往采用utf-8编码的数据库中插入表情数据,java程...
  • woslx
  • woslx
  • 2015年11月06日 16:53
  • 18052

mysql设置字符集utf8mb4

为什么要把数据库的字符集设置成utf8mb4呢?以前一直用的都是utf8啊? 答案在这里:utf8适用于不使用移动设备的互联网交互,utf8mb4适用于当前的移动设备互联网开发,因为移动设备中常常会...
  • dqchouyang
  • dqchouyang
  • 2016年05月22日 07:40
  • 9324

centos操作系统mysql utf8设置

一、登录MySQL查看用SHOW VARIABLES LIKE ‘character%’;下字符集,显示如下: +--------------------------+-----------...
  • rosten
  • rosten
  • 2014年05月07日 15:18
  • 2817

MySQL乱码问题以及utf8mb4字符集

MySQL乱码问题以及utf8mb4字符集 1.乱码 推荐大家看 深入MySQL字符集设置 ,区分检查client端、server端的编码;最简单暴力的方式,是在所有的环节都显式明确的指定...
  • reblue520
  • reblue520
  • 2016年09月14日 20:08
  • 2537

阿里云rds mysql数据设置字符集为utf8mb4,支持ios的emoji

捣鼓了一天,尼玛的,一部就出来了…………不想说话,只想静静 控制台修改字符集参数(character_set_server): 重启数据实例,OK,完美解决……………… 最后非常重要的说...
  • hgg923
  • hgg923
  • 2016年12月19日 22:21
  • 2715

MySQL 数据库ut8mb4字符集

1:什么是utf8mb4字符集? 5.5版本之前的MySQL数据库不支持utf8mb4字符集,也就是utf8字符集的超集;utf8一个字符最多3字节,而utf8mb4则扩展到一个字符最多能有4字节。...
  • liveUpTo
  • liveUpTo
  • 2015年08月11日 21:56
  • 910

mysql/Java服务端对emoji的支持

前言: 最近开发的iOS项目因为需要用户文本的存储,自然就遇到了emoji等表情符号如何被mysql DB支持的问题。困扰了数日,在就要绝望放弃的边缘,终于完成了转换和迁移。在此特别分析和整...
  • junsure2012
  • junsure2012
  • 2014年12月26日 14:09
  • 11126
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mysql utf8mb4编码设置
举报原因:
原因补充:

(最多只允许输入30个字)