首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL字符utf8和utf-8的关系

) UTF-8 UTF-8是Unicode的实现方式之一 其它实现方式还有UTF-16, UTF-32 变长编码,一个符号使用1~4个字节表示 utf8MySQL存储Unicode数据的一种可选方法...utf8 MySQL中实现了UTF-8编码的unicode 字符MySQLutf8是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

77810

MySQL字符集你还在使用错误的utf8

所有在使用“utf8”的MySQL和MariaDB用户都应该改用“utf8mb4”,永远都不要再使用“utf8”。 MySQL的“utf8”不是真正的UTF-8。...“utf8”只支持每个字符最多三个字节,而真正的UTF-8是每个字符最多四个字节。 MySQL一直没有修复这个bug,他们在2010年发布了一个叫作“utf8mb4”的字符集,绕过这个问题。 ?...但是MySQL的“utf8字符集与其他程序还不兼容! MySQL从4.1版本开始支持UTF-8,也就是2003年,而今天使用的UTF-8标准(RFC 3629)是随后才出现的。...同年9月,他们对MySQL源代码进行了一次调整:“UTF8现在最多只支持3个字节的序列”。 utfmb4字符集 支持BMP和补充字符。 每个多字节字符最多需要四个字节。...这里是引用 总结 如果你在使用MySQL或MariaDB,不要再用“utf8”编码,而用“utf8mb4”。 推荐阅读 将现有数据库的字符编码从“utf8”转成“utf8mb4”。

1.2K10
您找到你想要的搜索结果了吗?
是的
没有找到

MySQL客户端显示binary字符代码改造

一、客户端显示字符背景介绍 二、代码跟踪 三、代码改造 四、总结 ---- 一、客户端显示字符背景介绍 MySQL最新版本有一个新功能,在使用客户端的时候,最后加上--skip-binary-as-hex...选项可以直接显示二进制值对应的字符串,不加该选项就可以按照原来的设置格式显示。...二、代码跟踪 沿用上面的表查询一下哪段代码决定字符显示格式,代码解析如下: 输入该命令后找到相关字符显示的代码: mysql> select * from varb; class Item_field...-----+ | 1 | abcd | +------+------+ 1 row in set (0.00 sec) 四、总结 MySQL客户端字符显示依赖charset_for_protocol...如果未来新定义Item或者Field记得也要相应修改该函数来正确显示数据。

88830

关于 MySQL UTF8 编码下生僻字符插入失败假死问题的分析

由官方文档可知,mysql 支持的 utf8 编码最大字符长度为 3 字节,如果遇到 4 字节的宽字符就会插入异常了。...也就是说,任何不在基本多文本平面的 Unicode字符,都无法使用 Mysqlutf8 字符集存储。...utf8Mysql 中的一种字符集,只支持最长三个字节的 UTF-8字符,也就是 Unicode 中的基本多文本平面。...当使用 utf8 字符集时,需要保留的长度就是 utf8 最长字符长度乘以字符串长度,所以这里理所当然的限制了 utf8 最大长度为 3,比如 CHAR(100)  Mysql 会保留 300字节长度。...最后顺便总结下4字节utf8字符的系统支持情况: windows xp: 我所测试的xp系统都不支持4字节utf8字符, 浏览器用占位符显示 windows 7: 支持4字节utf8字符

3.1K90

MySQL实战第十七讲-如何正确显示随机消息?

今天这篇文章,我就从这个性能问题说起,和你说说 MySQL 中的另外一种排序需求,希望能够加深你对 MySQL 排序逻辑的理解。...这个英语学习 App 首页有一个随机显示单词的功能,也就是根据每个用户的级别有一个单词表,然后这个用户每次访问首页的时候,都会随机滚动显示三个单词。...接下来,我们通过慢查询日志(slow log)来验证一下我们分析得到的扫描行数是否正确。...这时候,我们就要回到一个基本概念:MySQL 的表是用什么方法来定位“一行数据”的。...再回到我们文章开头的问题,怎么正确地随机排序呢? 随机排序方法 我们先把问题简化一下,如果只随机选择 1 个 word 值,可以怎么做呢?思路上是这样的: 1.

43820

MySQL深入学习第十七篇-如何正确显示随机消息?

今天这篇文章,我就从这个性能问题说起,和你说说 MySQL 中的另外一种排序需求,希望能够加深你对 MySQL 排序逻辑的理解。...这个英语学习 App 首页有一个随机显示单词的功能,也就是根据每个用户的级别有一个单词表,然后这个用户每次访问首页的时候,都会随机滚动显示三个单词。...Extra 字段显示 Using temporary,表示的是需要使用临时表;Using filesort,表示的是需要执行排序操作。...接下来,我们通过慢查询日志(slow log)来验证一下我们分析得到的扫描行数是否正确。...再回到我们文章开头的问题,怎么正确地随机排序呢? 随机排序方法 我们先把问题简化一下,如果只随机选择 1 个 word 值,可以怎么做呢?思路上是这样的: 1.

54210

Linux下MySQL 5.55.6的修改字符集编码为UTF8(彻底解决中文乱码问题)

昨天在CentOS 7上遇到MySQL 5.6遇到乱码问题,特此总结一下: 一、登录MySQL,用SHOW VARIABLES LIKE ‘character%’;查看下字符集,显示如下: +-----...-----------------+ character_set_database和character_set_server的默认字符集还是latin1。...二、最简单的完美修改方法,修改mysql的my.cnf文件中的字符集键值(注意配置的字段细节): 1、在[client]字段里加入default-character-set=utf8,如下: [client...=utf8,如下: [mysqld] port = 3306 socket = /var/lib/mysql/mysql.sock character-set-server=utf8 3、在[mysql...]字段里加入default-character-set=utf8,如下: [mysql] no-auto-rehash default-character-set=utf8 修改完成后,service

2.6K40

使用mysql命令行创建删除数据库

,   如果添加mysql的环境变量,可以切换到mysql的安装目录下的bin目录,再使用 mysq -uroot   你也可以手动为mysql添加环境变量。...这里就不介绍怎么添加环境变量的方法了   密码输入正确之后,就会出现“Welcome to the MySQL monitor.  ...Commands end with ; or \g. ......”字样,   命令行出现“mysql》”字符前缀。现在你就可以使用命令对mysql进行操作了。...mysql的所有命令都以“;”或者\g为结束符   2、新建数据库   在新建数据库之后,我们先设置一下字符mysql>SET NAMES utf8;   然后再创建数据库 mysql>CREATE...DATABASE lesson   3、显示所有数据库 mysql>SHOW DATABASES;   4、使用数据库 mysql>USE 数据库名;   5、新建表 mysql>CREATE TABLE

3.9K20

:Caused by: java.sql.SQLException: Incorrect string value: xF0x9Fx98x80xE3

这表明MySQL数据库当前的字符集无法正确处理这个字符,导致存储失败。 该错误通常出现在以下情况中:字符集不匹配:数据库的字符集与应用程序或数据源的字符集不一致,导致无法正确处理特殊字符。...字符集不支持:数据库的字符集不支持存储特定的字符字符序列,导致存储失败。字符集设置错误:数据库在创建或配置时正确设置字符集,导致不支持存储特殊字符。...常见的字符集有​​utf8​​、​​utf8mb4​​等。2. 修改表结构如果数据库字符集已正确配置,但仍然出现错误,可能是某个表的字符集或字段的字符集不支持存储特定的字符。...在之前的版本中,MySQL使用的是utf8字符集,只能支持Unicode的基本多语言平面(BMP)字符,即UCS-2编码范围内的字符。...其次,要确保应用程序和数据库客户端都支持utf8mb4字符集,以便正确地读取和显示数据。

67320

mysql学习总结02 — 数据类型

如果数据本身小于127个字符:额外开销一个字节,如果大于127个,开销两个字节 char的数据查询效率比varchar高 char 和 varchar 数据存储对比 (utf8字符占用3字节) 存储数据...,如果数据超过255字符,一定选择text存储 mysql记录长度 mysql中规定记录长度 (record == row) 总长度不能超过65535字节,varchar能够存储的理论值为65535字符...,字符在不同的字符集下占用多个字节,且需要额外的字节来保存长度 utf8 ==> (65535 - 2) / 3 = 21844 gbk ==> (65535 - 2) / 2 = 32766 5. enum...> create table tbTest ( gender enum('男','女','保密') ) charset utf8; mysql> insert into...; mysql> insert into tbTest values('小提琴,乒乓球,编程'); 本质是存储使用二进制位控制选取 (0选中 1选中) 后的十进制值 小提琴 小号 乒乓球 游泳 羽毛球

1.4K20

MySQL字符集乱码总结

但自从4.1以来MySQL加入了多字符集的支持,很多MySQL使用者发现中文居然不能使用了,显示变成了一堆乱码!...数据库字体没有设置正确,如果数据库字体设置不正确,那么connection字符集转换成database字符集照样丢失编码,原因跟上面一样。...= gb2312,那么至少connection的字符集要大于等于gb2312,否则就会丢失信息 4.以上三步做正确的话,那么所有中文都被正确地转换成utf8格式存储进了数据库,为了适应不同的浏览器,不同的客户端...,你可以修改character_set_results来以不同的编码显示中文字体,由于utf8是大方向,因此web应用是我还是倾向于使用utf8格式显示中文的。..."); //连接字符集使用utf8格式 $this->conn->query("set character_set_results = utf8");       //显示字符集使用utf8格式 return

9.2K20

解决wampServer 中MySQL插入中文乱码问题

大家在使用wampserver中的mysql数据库时,插入中文会显示“??”,很多小伙伴都不知道给如何做,明明在创建数据库和表时已经设置字符为UTF-8了,可插入结果还是乱码。...插入中文字符时,与之不匹配,就会出现乱码。 本人使用的是MySQL 5.0版,并用C#操作MYSQL数据库,当插入中文字符时,发现显示的是乱码。 初步估计是字符集没有配对。...后想起,虽然将MySQL字符集设置为gb2312或utf8,但已经建立的数据库和表,仍采用的是默认的字符集,也即仍为当初的西欧字符集,最好,只得忍痛将数据库删除,重新以gb2312字符集建立数据库和表...再安装好MySQL数据库后,可以手工或使用配置工具,将my.ini文件中的默认字符集改为gb2312,再重新建库和表时,不用再在语句中指定字符集,其默认设置也即为gb2312,可以正常显示中文字符集。...我找到一个方法好像可以解决这个问题了 在安装mysql server的时候,无论是选择gb2312还是utf-8,都没有关系,这些字符集在phpMyAdmin中都可以很好的工作,主要是自己的脚本要正确显示中文

2.2K20

深入理解MySQL字符集及校对规则(二)

上一篇呢,从理论上介绍了MYSQL字符集和校对规则是什么以及如何正确的使用字符集;关于第一部分的内容可参考:深入理解MySQL字符集及校对规则(一) 下面这部分呢,主要介绍MySQL字符编码转换原理以及字符集转化流程案例测试...二、字符集常见处理操作 1.查看字符集编码设置 mysql> show variables like ‘%character%’; 2、设置字符集编码 mysql> set names ‘utf8’;...) character set xxx; 6、字符集的正确实践: MySQL软件本身是没有字符集的,主要是因为工具所在的OS的字符集(Windows:gbk、Linux:utf8),所以字符集的正确实践非常重要...1、建立数据库的时候注意字符集(gbk、utf8); 2、连接数据库以后,无论是执行dml还是select,只要涉及到varchar、char列,就需要设置正确字符集参数。...)字符集为utf8后,再次查询数据显示就正常了 root@localhost [wjqtest]>set character_set_results=utf8; Query OK, 0 rows affected

1.9K10

utf8mysql占几个字符_utf-8的中文,一个字符占几个字节「建议收藏」

于是就发明了GB2312这些汉字编码,典型的用2个字节来表示绝大部分的常用汉字,最多可以表示65536个汉字字符,这样就不难理解有些汉字你在新华字典里查得到,但是电脑上如果不处理一下你是显示不出来的了吧...这下各用各的字符集编码,这世界咋统一?俄国人发封email给中国人,两边字符集编码不同,尼玛显示都是乱码啊。...unicode,将世界上所有的符号都纳入其中,每一个符号都给予一个独一无二的编码,现在unicode可以容纳100多万个符号,每个符号的编码都不一样,这下可统一了,所有语言都可以互通,一个网页页面里可以同时显示各国文字...互联网的兴起,网页上要显示各种字符,必须统一。utf-8就是Unicode最重要的实现方式之一。另外还有utf-16、utf-32等。UTF-8不是固定字长编码的,而是一种变长的编码方式。...这是种比较巧妙的设计,如果一个字节的第一位是0,则这个字节单独就是一个字符;如果第一位是1,则连续有多少个1,就表示当前字符占用多少个字节。

63420

Emoji 表情图标在 iOS 与 PHP 之间通信及 MySQL 存储

在测试过程中我们发现,用户在 iOS 端里输入了 Emoji 表情提交到服务器以后,PHP 无法在 MySQL 数据库里正确保存,会遇到乱码的问题。下面是原因探析和解决办法。...从技术上说,单个 Emoji 表情实际上是使用 UTF8 编码的一个字符,苹果在 iOS4 开始支持了 Emoji 的显示,当时用的是 SoftBank 的方案。...在日本的三家运营商之间,用来表示同一个表情的 UTF8 码并不相同(见对比列表),他们之间要做一个转换才能正确显示。...这是由于采用 Unified 标准的单个 Emoji 字符一般为 4 个字节,超过了 MySQL 数据库 utf8 字符集支持的每个字符 3 个字节的限制,存入数据库以后会产生乱码或者破坏数据。...另外一种方式从 MySQL 自身解决。从 MySQL 5.5.3 开始,MySQL 支持一种 utf8mb4 的字符集,这个字符集能够支持 4 字节的 UTF8 编码的字符

1.3K20
领券