MySQL 字符集utf8和utf-8的关系

目录

  • 什么是字符集(character set)
  • 校对规则(collation)
  • ASCII码
  • Unicode国际化支持
  • UTF-8
  • utf8
  • utf8与utf8mb4的关系
  • 超集
  • 字符集设置

什么是字符集(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区别

原文地址:https://www.cnblogs.com/YangJiaXin/p/10772229.html

时间: 2024-10-08 19:52:14

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

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

MySQL中涉及的几个字符集 character-set-server/default-character-set:服务器字符集,默认情况下所采用的.character-set-database:数据库字符集.character-set-table:数据库表字符集.优先级依次增加.所以一般情况下只需要设置character-set-server,而在创建数据库和表时不特别指定字符集,这样统一采用character-set-server字符集.character-set-client:客户端的字符

《Mycat学习笔记》 番外篇一.客户端使用latin1字符集,后端MySQL为UTF8字符集,MyCat日志分析。

其实这个番外篇比较无聊——即客户端为lantin字符集,后面MySQL为U8字符集,MyCat在中间到底会起什么作用. 再说下本次验证的环境: Mac OS 10.11.2 MySQL 5.6 MyCat 1.5 OK,开始我们的验证工作. 1) 由于数据库与操作系统已被默认设置为U8编码,计划通过修改Mysql  “character_set_client” 参数调整客户端字符集配置进行验证. 关于MYSQL字符集较全面的介绍,请参考 <mysql_query("set names gb

mysql中通过my.cnf设置默认字符集utf-8

选项配置 配置文件路径:/full/path/mysql/bin/my.cnf (默认为/etc/my.cnf ) [client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] init_connect='SET collation_connection = utf8_unicode_ci' init_connect='SET NAMES utf8' character-set-server=utf

mysql设置utf8字符集

mysql字符集含义请看mysql手册第10.1节Character Set Support mysql的字符集转换过程请看鸟哥博客的这一篇 0. 初始状态 debian使用apt安装的mysql一开始是这样的 可以看到默认情况下 sever的字符集是latin1 db的字符集是latin1 mysql cli的client和connect的字符集是utf8 (pdo连接的client和connect的默认字符集是latin1) 1. server charset server的字符集设置可以通

linux下设置mysql数据库字符集utf8

mysql中文乱码解决方法:将mysql数据库编码统一utf8 查看数据库编码: show variables like 'character%'; 编辑/etc/my.cnf [mysql] default-character-set=utf8 [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Disabling symbolic-links is recommended to preve

修改mysql字符集为utf8

#在[client]字段添加 [client] default-character-set=utf8 #在[mysqld]字段添加 [mysqld] character-set-server=utf8 #在[mysql]字段添加 [mysql] default-character-set=utf8 #修改完成后重启mysql ~$ sudo /etc/init.d/mysql restart #查看效果 mysql> show variables like '%char%'; +--------

MySQL字符集编码

MySQL字符集编码总结 之前内部博客上凯哥分享了一篇关于mysql字符集的文章,之前我对mysql字符集一块基本没有深究过,看到凯哥文章后有些地方有点疑惑,遂自己去看了mysql的官方文档,并参考了凯哥的文章,总结了这篇博文.本文主要是对mysql常见的字符集问题进行整理,如有错误,请大家指正. 1.MySQL字符集编码简介 谈到字符集,总会跟编码扯上关系,有关字符集和编码的理论知识请参见我之前的文章.MySQL内部是支持多种字符集的,这里就不再严格区分字符集和编码的概念了.同时,MySQL中

MYSQL 字符集问题【转】

MySQL的字符集支持(Character Set Support)有两个方面:       1:字符集(Character set) 2:排序方式(Collation) 对于字符集的支持细化到四个层次:       1:服务器(server): 2:数据库(database) 3:数据表(table) 4:连接(connection) MySQL默认字符集       MySQL对于字符集的指定可以细化到一个数据库,一张表,一列,应该用什么字符集.但是,传统的程序在创建数据库和数据表时并没有使

MySQL字符集导致的乱码问题!

MySQL字符集导致的乱码问题 MySQL的字符集支持(Character Set Support)有两个方面:  1.字符集(Character set) 2.排序方式(Collation).  对于字符集的支持细化到四个层次:  1.服务器(server) 2.数据库(database) 3.数据表(table) 4.连接(connection) 注意:MySQL对于字符集的指定可以细化到一个数据库,一张表,一列,应该用什么字符集. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~