utf8mb4和utf8的区别是什么?

阿里巴巴Java开发手册(嵩山版)中有如下规则:

12. 【参考】因国际化需要,所有的字符存储与表示,均采用 utf 8 字符集,那么字符计数方法需
要注意。
说明:
SELECT LENGTH("轻松工作"); 返回为 12
SELECT CHARACTER_LENGTH("轻松工作"); 返回为 4
如果需要存储表情,那么选择 utf8mb4 来进行存储,注意它与 utf8 编码的区别。

区别如下:

utf8mb4和utf8的主要区别在于它们对Unicode字符的支持范围和存储空间的需求:

  1. 编码范围

    • utf8(也常被称为utf8三字节UTF-8)在MySQL中原本设计为支持Basic Multilingual Plane (BMP)内的字符,这意味着它最多只能处理使用1到3个字节编码的Unicode字符。这涵盖了大部分常用的拉丁字母、西里尔字母、希腊字母、阿拉伯字母、汉字等。但是,它不支持BMP之外的字符,比如一些表情符号(Emojis)、某些罕用汉字、以及增补平面中的其他Unicode字符。
    • utf8mb4是utf8的扩展,能够支持存储任何Unicode字符,包括使用4个字节编码的字符,如表情符号、额外的罕用汉字以及增补平面中的其他字符。这使得utf8mb4成为存储包括表情符号在内的全系列Unicode字符的更好选择。
  2. 存储空间

    • 使用utf8字符集时,每个字符最多使用3个字节存储。例如,一个VARCHAR(10)字段在utf8下,如果存储全英文字符,每个字符需要1个字节,而存储中文字符则每个字符需要3个字节。
    • 使用utf8mb4字符集时,每个字符最多使用4个字节存储。这意味着相同的VARCHAR(10)字段,在存储字符时会占用更多的空间。对于全英文字符,utf8mb4仍然只需要1个字节,但对于需要4字节编码的字符(如某些表情符号),则每个字符需要4个字节。
  3. 性能与兼容性

    • 由于utf8mb4需要更多的存储空间,相比utf8,在存储和检索数据时可能会有轻微的性能损失,特别是在处理大量文本数据时。
    • 大多数现代应用程序和数据库系统都支持utf8mb4,但旧系统或有限制的系统可能仅支持utf8。

总结来说,如果你的应用需要支持和存储包括表情符号在内的所有Unicode字符,utf8mb4是更合适的选择。虽然它可能占用更多的存储空间,但它提供了更全面的字符支持。而对于不需要存储四字节字符的应用,使用utf8可以节省空间。

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

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

相关文章

硬件实用技巧:cadence Aleego创建焊盘过程

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/140110911 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…

<电力行业> - 《第11课:配电(1)》

1 配电 配电(power distribution)是在电力系统中直接与用户相连并向用户分配电能的环节。配电系统由配电变电所、高压配电线路、配电变压器、低压配电线路以及相应的控制保护设备组成。 1.1 概念 配电系统是由多种配电设备(或元件&#xf…

vue2中vuedraggable设置部分元素不可拖拽,不可移动

文章目录 前言1、版本2、vuedraggable页面的具体使用3.核心(1) move官网说明(2) 注意点:(3) onDraggableMove方法 总结 前言 需求:左边是复选框,右边是选中的数据,编辑传入的数据不可拖拽,不可移动(其实还…

Datax快速使用之牛刀小试

前言 一次我发现业务他们在用 datax数据同步工具,我尤记得曾经 19 年使用过,并且基于当时的版本还修复了个 BUG并且做了数据同步管道的集成开发。没想到时间过的飞快,业务方基于海豚调度 2.0.6 的版本中有在使用,由于业务方还没有…

Python 连接 Doris pymysql游标cursor.excute(sql) 并且添加事务和自动重连操作

pymysql.cursors 普通连接: import pymysql.cursors conn pymysql.connect(host"127.0.0.1",port9030, user"root", password"", database"ssb", charsetutf8) mycursor conn.cursor() mycursor.execute("select *…

JDBC中如何处理数据库连接超时和SQL超时?

在JDBC(Java Database Connectivity)中,处理数据库连接超时和SQL执行超时是确保应用程序稳定性和性能的重要方面。以下是如何处理这两种超时的详细步骤: 1. 数据库连接超时 数据库连接超时通常发生在尝试与数据库建立连接时&…

【启明智显活动分享】 启明与你,上海慕尼黑电子展不见不散!

启明与你,上海慕尼黑电子展不见不散!🎉 🔍 展会现场,你将亲眼目睹RTOS、LINUX、Android全系列方案及产品的精彩展示。从经典到前沿,一站式满足你的技术探索需求。 💡 更值得期待的是&#xff0…

Java源码实现《植物大战僵尸》

前言 学Java的朋友们,福利来了,今天小编给大家带来了一款 植物大战僵尸源码,看图: 视频演示 java植物大战僵尸 环境JDK1.8 类继承UML图 源码实现 我们先从main函数看起,继承了javafx.application.Application。JavaFx是Java图形…

mysql5.7.30忘记root密码

windows系统安装了mysql5.7.30,在使用navicat链接mysql时候,提示 如何解决: 打开任务管理器的服务,查看有没有MYSQL服务。 如果没有,则按照下面的csdn博客进行操作。 https://blog.csdn.net/clj198606061111/article…

本机时间与远程机时间同步一致

在远程开发过程中,确保本机时间与远程机时间一致非常重要,特别是对于依赖时间戳的操作(例如 ROS 中的 TF 变换)。以下是一些同步本机与远程机时间的方法: 方法一:使用 ntpdate 同步时间 在本机上同步时间…

Eclipse 2024最新版本分享

一、软件介绍 Eclipse是一个开源的、基于Java的可扩展开发平台,最初由IBM公司开发,后于2001年贡献给开源社区,并由Eclipse基金会负责管理和开发。 如果在官网上下载比较慢,可以试试从云盘中下载,解压即可使用。 二、下…

Codeforces Testing Round 1 B. Right Triangles 题解 组合数学

Right Triangles 题目描述 You are given a n m nm nm field consisting only of periods (‘.’) and asterisks (‘*’). Your task is to count all right triangles with two sides parallel to the square sides, whose vertices are in the centers of ‘*’-cells. …

Nacos 扫盲

文章目录 Nacos 技术扫盲文档什么是 Nacos?Nacos 的主要功能Nacos 的使用场景如何使用 Nacos使用示例Nacos 的优缺点与其他同类工具的对比结论 扩展如何确认自己的项目有没有使用Nacos1. 检查配置文件2. 检查项目依赖3. 检查代码中是否有 Nacos 相关的使用4. 检查启…

使用Pogo-DroneCAN CANHUB扩展板扩展飞控的CAN口

关键词:Ardupilot,Pixhawk,DroneCAN CANHUB扩展,扩展飞控CAN口 keywords:Ardupilot,Pixhawk,DroneCAN CANHUB Extend 摘要:使用Pogo-DroneCAN CANHUB扩展板扩展飞控CAN口&#xff…

面试专区|【46道软件性能测试高频题整理(附答案背诵版)】

性能测试包含的方法有哪些(至少列举5种)? 性能测试是评估软件系统在各种条件下的表现的过程,其中包括多种测试方法。以下是其中一些常见的性能测试方法: 负载测试:通过模拟不同负载情况来测试系统的性能表…

面试专区|【75道软件测试基础高频题整理(附答案背诵版)】

软件测试分为几个阶段 各阶段的测试策略和要求? 软件测试分为以下几个阶段: 单元测试阶段:测试策略注重对软件的最小代码单元进行测试,通常由开发人员进行。要求所有关键函数和方法都需要被测试覆盖,测试案例应覆盖正…

一文讲解Docker入门到精通

一、引入 1、什么是虚拟化 在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,它允许在一台物理机上创建多个独立的虚拟环境,这些环境被称为虚拟机(VM)。每个虚拟机都可以…

element ui form 表单验证

表单验证方法 在el-form元素上总体设置校验规则rules&#xff0c;下面是官方案例 <el-form :model"ruleForm" :rules"rules" ref"ruleForm" label-width"100px" class"demo-ruleForm"><el-form-item label"…

湖北大学2024年成人高考函授报名专升本会计学专业介绍

湖北大学&#xff0c;这所坐落于历史文化名城武汉的高等学府&#xff0c;自其创立之初&#xff0c;便秉持着“厚德博学&#xff0c;求是创新”的校训&#xff0c;致力于培养一代又一代的优秀人才。而今&#xff0c;为满足广大社会人士对高等教育的渴求&#xff0c;特别是那些已…

【Java EE】Spring IOCDI

Spring IOC & DI 文章目录 Spring IOC & DI一、Spring是什么&#xff1f;二、IOC(控制反转)2.1 通俗理解2.2 造汽车的例子理解IOC2.3 IOC详解1. 获取Bean2. 方法注解——Bean1. 应用场景&#xff1a;2. 应用方法&#xff1a;3. 注意要点&#xff1a; 特别注意: 四、DI4…