mysql utf8 4位_mysql中utf8和utf8mb4区别

MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,为了节省空间,一般情况下使用utf8也就够了。

二、内容描述

那上面说了既然utf8能够存下大部分中文汉字,那为什么还要使用utf8mb4呢? 原来mysql支持的 utf8 编码最大字符长度为 3 字节,如果遇到 4 字节的宽字符就会插入异常了。三个字节的 UTF-8 最大能编码的 Unicode 字符是 0xffff,也就是 Unicode 中的基本多文种平面(BMP)。也就是说,任何不在基本多文本平面的 Unicode字符,都无法使用 Mysql 的 utf8 字符集存储。包括 Emoji 表情(Emoji 是一种特殊的 Unicode 编码,常见于 ios 和 android 手机上),和很多不常用的汉字,以及任何新增的 Unicode 字符等等。

三、问题根源

最初的 UTF-8 格式使用一至六个字节,最大能编码 31 位字符。最新的 UTF-8 规范只使用一到四个字节,最大能编码21位,正好能够表示所有的 17个 Unicode 平面。

utf8 是 Mysql 中的一种字符集,只支持最长三个字节的 UTF-8字符,也就是 Unicode 中的基本多文本平面。

Mysql 中的 utf8 为什么只支持持最长三个字节的 UTF-8字符呢?我想了一下,可能是因为 Mysql 刚开始开发那会,Unicode 还没有辅助平面这一说呢。那时候,Unicode 委员会还做着 “65535 个字符足够全世界用了”的美梦。Mysql 中的字符串长度算的是字符数而非字节数,对于 CHAR 数据类型来说,需要为字符串保留足够的长。当使用 utf8 字符集时,需要保留的长度就是 utf8 最长字符长度乘以字符串长度,所以这里理所当然的限制了 utf8 最大长度为 3,比如 CHAR(100)  Mysql 会保留 300字节长度。至于后续的版本为什么不对 4 字节长度的 UTF-8 字符提供支持,我想一个是为了向后兼容性的考虑,还有就是基本多文种平面之外的字符确实很少用到。

要在 Mysql 中保存 4 字节长度的 UTF-8 字符,需要使用 utf8mb4 字符集,但只有 5.5.3 版本以后的才支持(查看版本: select version();)。我觉得,为了获取更好的兼容性,应该总是使用 utf8mb4 而非 utf8.  对于 CHAR 类型数据,utf8mb4 会多消耗一些空间,根据 Mysql 官方建议,使用 VARCHAR  替代 CHAR。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/422263.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

easyUI 添加CheckBox选择到DataGrid

author YHC 这个教程向你展示如何放置一个checkbox 列到datagrid,这个复选框用户将可以选择 选中/取消选中 datagrid行数据. 查看 Demo 添加一个checkbox 列我们仅仅需要添加一个列的checkbox 属性设置它为true,代码看上去就像这些: <table id"tt" title"Che…

前端学习(530):等分布局得间距方案第二种方式

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>等分布局</title><style>.parent{width…

mysql error报错_MySQL报错:Error writing file '/tmp/MY4WYVlC' (Errcode: 28 - No space left on device)...

MySQL报错&#xff1a;Error writing file /tmp/MY4WYVlC (Errcode: 28 - No space left on device)一、问题描述1、MySQL好好的&#xff0c;突然就不行了&#xff0c;信息如下&#xff1a;系统内部错误.错误信息&#xff1a;org.springframework.jdbc.UncategorizedSQLExcepti…

xcode中工程引用设置

在A工程中引用B工程&#xff0c;需对A工程进行如下三点设置&#xff1a; 1、Build Settings-->Header Search Paths,此处采用相对路径&#xff0c;功能为除A工程外其它头文件在编译时的搜索路径; 2、Build Phases-->Target Dependencies.暂不知道将B.a加到此处的作用是什…

mysql函数 用来查询匹配不到的数据_erlang连接mysql数据库后为什么fetch说匹配不到这个函数...

展开全部需要注意&#xff0c;官方放在googlecode的测试代码已经旧e69da5e887aa62616964757a686964616f31333337383865了&#xff0c;fetch接口实际上需要一个二进制list&#xff0c;所以是[<>]格式&#xff0c;而不是<>格式。以下是增、删、改、查操作的测试代码&…

添加组合索引时,做相等运算字段应该放在最前面

有一个通常的误解&#xff0c;觉得应该把选择性高的字段放在最前面&#xff0c;这通常只是针对一个字段的索引&#xff0c;对于组合索引&#xff0c;常常要把做等式运算的字段放在最前面&#xff0c;看看测试 USE AdventureWorks GOCREATE TABLE demo1 ( id INT identity(1,1)…

POJ 1422 Air Raid

二分图的最少边匹配&#xff0c;即找出最少的边可以覆盖所有的点。用匈牙利算法找出最大匹配&#xff0c;则最终结果为&#xff1a;ans 图的顶点数 - 最大匹配。 代码如下&#xff1a; 1 #include<iostream>2 #include<vector> 3 using namespace std;4 #include&…

Winform下载文件

/// <summary>/// 下载文件/// </summary>/// <param name"URL">下载文件地址</param>/// <param name"Filename">下载后的存放地址</param>/// <param name"Prog">用于显示的进度条</param>pu…

knn k的选取_KNN - 初窥K近邻算法

1>算法概述KNN: 全名K-NearestNeighbor&#xff0c;K近邻算法&#xff0c;简单讲就是每个样本都可以用最接近的k个邻居表示&#xff0c;或者说共享同一个标签。KNN是一种分类(classification)算法&#xff0c;它输入基于实例的学习&#xff08;instance-based learning&…

前端学习(535):多列布局2

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>css多列布局</title><style>.parent{co…

刚装了fedora 17,装机必备,解决视频格式和中文输入法。

今天把ubuntu 12.04换成了fedora 17&#xff0c;喜欢gnome3的感觉&#xff0c;呵呵。为了刺激英语学习&#xff0c;特意选择的英文。结果就是没了中文输入法。。。。我的电脑是64位的&#xff0c;32位的同学变通下。 中文输入法&#xff1a; $ sudo yum install sunpinyin.i686…

前端学习(536):多列布局3列得间距

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>css多列布局</title><style>.parent{co…

Silverlight 5 Features

原文下载地址Improved media support Low Latency Audio Playback: Use the SoundEffect API to trigger low-latencysound Variable Speed Playback: allows video to be played at different speedsand supports fast-forward and rewind. At up to twice th…

scp会覆盖同名文件吗_你会Hypermesh一键式完成几何文件到求解文件的输出吗?

前不久&#xff0c;我在仿真秀APP更新了2篇Hypermesh二次开发的文章&#xff0c;介绍了《Hypermesh二次开发之电子产品跌落全流程开发讲解》和《前处理软件Hypermesh二次开发如何从入门到精通》&#xff1b;同步推出了《Hypermesh 二次开发高级培训11讲》线上视频课程&#xff…

前端学习(537):多列布局4横跨多列

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>css多列布局</title><style>.parent,.p…

JSONP 跨域共享信息

定义来源&#xff1a;http://zh.wikipedia.org/wiki/JSONP JSONP&#xff08;JSON with Padding&#xff09;是资料格式 JSON 的一种“使用模式”&#xff0c;可以让网页从别的网域要资料。另一个解决这个问题的新方法是跨来源资源共享。 由于同源策略&#xff0c;一般来说位于…

crontab 每周五_crontab定时任务 每隔一周的周五执行

定时任务每隔一周的周五执行 * * * * 05 /bin/bash -c (($(date +\%s) / 86400 \% 14)) && your-script 测试是否成功执行命令 写入定时任务 crontab -e 01 04 * * 05 /bin/bash -c (($(date +\%s) / 86400 \% 14)) && /bin/date +\%F_\%w >>/tmp/date.l…