什么是字符集(character set)

  • 字符的二进制编码方式
  • 二进制编码到一套字符的映射
  • 二进制->编码->字符

校对规则(collation)

  • 在字符集内用于比较字符的一套规则

ASCII码

  • 1个字节由8个二进制位组成
  • 1个字节可表示256种不同的状态(256个不同符号)
  • ASCII码规定了128个字符(英文字符和一些标点符号)的编码

Unicode国际化支持

  • 世界上存在多种编码方式,同一个二进制数字被解释成了不同的符号
  • 现存 编码 不能在多语言环境中使用,诞生了Unicode(统一码)
  • 一个字符的Unicode编码是确定的
  • Unicode编码实现方式各不相同
  • Unicode的实现方式称为Unicode转化格式(UTF)

UTF-8

  • UTF-8是Unicode的实现方式之一
  • 其它实现方式还有UTF-16, UTF-32
  • 变长编码,一个符号使用1~4个字节表示
  • utf8是MySQL存储Unicode数据的一种可选方法

utf8

  • MySQL中实现了UTF-8编码的unicode 字符集
  • MySQL中utf8是utf8mb3的别名
  • utf8中,一个符号使用1~3个节点表示
  • 对UTF-8支持不彻底,可采用utf8mb4字符集

utf8与utf8mb4的关系

  • 都是实现了UTF-8编码的unicode 字符集
  • utf8仅支持基本多语言平面Basic Multilingual Plane (BMP)
  • utf8mb4支持BMP之外的补充字符(如emoji,emoji 是一种特殊的 Unicode 编码)
  • utf8 一个字符最多使用3个字节存储,utf8mb4 一个字符最多使用4个字节存储
  • 对于BMP字符,utf8和utf8mb4具有相同的编码,相同的长度
  • 对于非BMP字符,utf8mb4使用4个字节来存储,utf8不能存储非BMP字符
  • innodb中默认最大可对767个字节建立索引
  • 使用utf8 的列最多可对255个字符建立索引
  • 使用utf8mb4 的列最多可对191个字符建立索引

超集

  • 字符集A,B ,B支持的所有字符A都支持,A 是B超集
  • 比如 GBK字符集是GB2312字符集的超集,它们又都是ASCII字符集的超集
  • utf8mb4是utf8的超集

字符集设置

set names x 等价于

  • set character_set_client=x;
  • set character_set_connection=x;
  • set character_set_results=x;

--default-character-set 用户连接时设置字符集 等价于

  • set character_set_client=x;
  • set character_set_connection=x;
  • set character_set_result=x;
    init-connect=set names binary
  • 让client和server交互的时候以 什么模式(不做任何转化)来传送

default-character-set

  • 设置[mysql]和[client] 中的字符集

character-set-server

  • 设置[mysqld] 进程的默认字符集

collation-server

  • 设置[mysqld] 进程的默认校对规则
  • utf8_general_ci 查找、排序不区分大小写
  • utf8_bin 查找、排序区分大小写

参考
Unicode Support
字符集与编码杂谈
ASCII,Unicode 和 UTF-8
清官谈mysql中utf8和utf8mb4区别

MySQL 字符集utf8和utf-8的关系的更多相关文章

  1. mysql字符集 utf8 和utf8mb4 的区别

    一.导读我们新建mysql数据库的时候,需要指定数据库的字符集,一般我们都是选择utf8这个字符集,但是还会又一个utf8mb4这个字符集,好像和utf8有联系,今天就来解析一下这两者的区别. 二.起 ...

  2. mysql安装设置mysql字符集utf8及修改密码

    MySQL的下载,建议下载MySQL的解压缩版本 MySQL官网下载推荐别下最新版本的原因是因为很多之前用的jar包和工具类不兼容最新版本的 可以下5.多的和六点多的 这样的压缩包解压再配置就行了 安 ...

  3. MySQL字符集 utf8 和 utf8mb4 区别及排序规则 general_ci 和 unicode_ci 和 bin 的区别

    先说字符集 utf8mb4说明:MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode.好在utf8mb4是utf8的超 ...

  4. 设置MySQL字符集utf8

    1.修改mysql 配置文件my.cnf 标签[mysqld]下添加即可 character-set-server = utf8 2.创建数据库时设置字符集 create database db_na ...

  5. mysql字符集utf8和utf8mb4区别

    1.起因 公司游戏项目上线第一天,出现单个区服异常宕机的问题,根据日志排查下来,连接数据的时候报错,后面排查是因为有玩家插入Emoji 等表情导致无法存储如数据库,数据库字符集编码为utf8,后续改成 ...

  6. MySQL 如何修改字符集 utf8 改为 utf8mb4

    在实行sql server 向 mysql 迁移数据时,报错: Incorrect string value: '\xF0\x9F\x98\x8A' 原因是mysql 采用的是 utf8 的字符集,而 ...

  7. MySQL字符集 GBK、GB2312、UTF8区别 解决 MYSQL中文乱码问题 收藏 MySQL中涉及的几个字符集

    MySQL中涉及的几个字符集 character-set-server/default-character-set:服务器字符集,默认情况下所采用的.character-set-database:数据 ...

  8. MySQL 数据库字符集 utf8 和 utf8mb4 的区别

    参考于今日头条上Java芋道源码的-----记住:永远不要在 MySQL 中使用 UTF-8 字符集选择 MySQL 的 utf8 实际上不是真正的 UTF-8.utf8 只支持每个字符最多三个字节, ...

  9. MySQL将utf8字符集改为utf8mb4

    前言 今天在查看tomcat日志时发现了一个错误:Cause: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x82\xF0 ...

随机推荐

  1. CheckBox获取一组及全选

    获取一组CheckBox: jQuery: $(function () { $("input[name=names]").click(function () { //获得所有的na ...

  2. gitlab 502

    经过一个下午的查找终于发现了错误,原来是在服务器上还开启了一个tomcat服务,占用了8080端口,使GitLab的unicorn服务不能开启. 最后在/etc/gitlab/gitlab.rb 中做 ...

  3. Codeforces Round #437 B. Save the problem!

    题意: 给你一个方案数,要求你输出满足该条件的总金额,面值数,和各个面值是多少,答案有多个,随便输出一个即可. Examples Input 18 Output 30 41 5 10 25 Input ...

  4. linux下配置redis4.0.2主从复制以及高可用

    一.环境 三台服务器分别为: 172.28.18.75/172.28.18.103/172.28.18.104 在三台服务器上分别部署一个redis节点以及一个sentinel节点 二.主从复制配置 ...

  5. MSTP+ VRRP 交换机的 配置过程

    配置思路采用以下思路配置: 1.在处于环形网络中的交换设备上配置MSTP基本功能,包括:a.配置MST域并创建多实例,配置VLAN2映射到MSTI1,VLAN3映射到MSTI2,实现流量的负载分担. ...

  6. LR基础理论详解

    本人参考了大神的博客(https://blog.csdn.net/cyh_24/article/details/50359055),写的非常详细,在此整理一下要点 逻辑斯蒂分布 基础公式了解 二项逻辑 ...

  7. Apache无法正常启动(配置多个监听端口)

    Apache监测多个端口配置: 1.conf->extra->httpd-vhosts.conf  检查配置项是否写错 2.http.conf listen端口是否监听正确 3.环境变量中 ...

  8. java爬虫框架webmagic学习(一)

    1. 爬虫的分类:分布式和单机 分布式主要就是apache的nutch框架,java实现,依赖hadoop运行,学习难度高,一般只用来做搜索引擎开发. java单机的框架有:webmagic和webc ...

  9. Eclipse 创建Android 模拟器失败:no cpu/abi system image available for this target

    (从网上搜了一个使用Android 4.4 API 20编译的图片) 这是因为SDK中没有模拟器使用的操作系统镜像. 如果项目使用API 19编译,则SDK中的system-images文件夹下,需要 ...

  10. JS同步与异步;

    JS的同步与异步 同步:代买从上往下的执行 异步:每个模块各执行各的,同时执行,互不干扰 四个异步事件:(1)定时器(2)ajax(3)时间的绑定(4)回调函数 现在用定时器来说一说setTimeOu ...