Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >mysql 256byte可以存多少汉字,字符编码length,char_length函数

mysql 256byte可以存多少汉字,字符编码length,char_length函数

作者头像
oktokeep
发布于 2024-12-09 23:53:39
发布于 2024-12-09 23:53:39
19700
代码可运行
举报
文章被收录于专栏:第三方工具第三方工具
运行总次数:0
代码可运行

mysql 256byte可以存多少汉字,字符编码length,char_length函数

在MySQL中,UTF-8编码下,每个汉字至少占用3个字节。因此,256字节可以存储的汉字数量为: (256字节) / (3字节/汉字) = 85.3汉字

由于UTF-8编码中,对于单字节的字符、双字节字符和三字节字符有不同的编码方式,实际使用中可能不能完全均匀分配这256个字节,这样算下来可能存储的汉字数量会更少。但是,这个计算给出了一个大致的范围。 请注意,由于MySQL在存储汉字时可能会使用额外的字节来完成UTF-8编码,所以实际能存储的汉字数量会更少。例如,对于4字节的UTF-8编码(用于表示扩展字符),每个字符将占用4个字节,这将进一步减少可存储的汉字数量。 实际应用中,考虑到数据库表的其他开销,如行首位、字段分隔符等,实际存储汉字的数量可能会更少。所以,在设计数据库表的时候,应当考虑到这些因素,并适当减少预期的存储量。

一个中文汉字占多少字节与编码有关 在mysql中,一个中文汉字所占的字节数与编码格式有关:如果是GBK编码,则一个中文汉字占2个字节;如果是UTF8编码,则一个中文汉字占3个字节,而英文字母占1字节。

UTF8:一个中文汉字=3个字节 utf-8, 英文字母1字节 GBK:一个中文汉字=2个字节 gbk, 英文字母2字节

函数 length()返回字节数,char_length()返回字符数。

GBK、GB2312等与UTF8之间都必须通过Unicode编码才能相互转换: GBK、GB2312 --> Unicode --> UTF8 UTF8 --> Unicode -> GBK、GB2312

GB2312是GBK的子集,GBK是GB18030的子集 GBK是包括中日韩字符的大字符集合 为了避免所有乱码问题,应该采用UTF-8,将来要支持国际化也非常方便 UTF8可以看作是大字符集,它包含了大部分文字的编码。 使用UTF8的一个好处是其他地区的用户(如香港台湾)无需安装简体中文支持就能正常观看你的文字而不会出现乱码。

gb2312是简体中文的码 gbk支持简体中文及繁体中文 big5支持繁体中文 utf8支持几乎所有字符

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql demo: 
#创建表
CREATE TABLE `book` (
  `SNO` VARCHAR(3) NOT NULL,
  `SNAME` VARCHAR(9) NOT NULL
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

#添加数据
INSERT INTO `book` (`SNO`, `SNAME`) VALUES('001','KangKang');
INSERT INTO `book` (`SNO`, `SNAME`) VALUES('002','Mike');
INSERT INTO `book` (`SNO`, `SNAME`) VALUES('003','Jane');
INSERT INTO `book` (`SNO`, `SNAME`) VALUES('123','test');
INSERT INTO `book` (`SNO`, `SNAME`) VALUES('124','test1');
INSERT INTO `book` (`SNO`, `SNAME`) VALUES('中国人','长城');

#添加超出字符长度的测试:Data too long for column 'SNO' at row 1
INSERT INTO `book` (`SNO`, `SNAME`) VALUES('124a','test1');
INSERT INTO `book` (`SNO`, `SNAME`) VALUES('中国人a','长城');

SELECT sno,sname,LENGTH(sno),CHAR_LENGTH(sno) FROM `book`;
#查询返回结果:
"sno"    "sname"    "length(sno)"    "char_length(sno)"
"001"    "KangKang"    "3"    "3"
"002"    "Mike"        "3"    "3"
"003"    "Jane"        "3"    "3"
"123"    "test"        "3"    "3"
"124"    "test1"        "3"    "3"
"中国人"    "长城"    "9"    "3"

结论: 在字符集为UTF-8的情况下: 若 MySQL version < 4.1:VARCHAR以字节为单位存储,假设全部为常用汉字,则VARCHAR(255)共可存放约85个汉字。 若 MySQL version >= 4.1:VARCHAR以字符为单位存储,假设全部为常用汉字,则VARCHAR(255)可以存放255个汉字。 当然,现在MySQL基本都大于4.1版本的,所以说MySQL中varchar(n)表示n个字符,无论汉字和英文,Mysql都能存入n个字符,仅是实际字节长度有所区别。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-12-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MySQL | VARCHAR(200)能存200个汉字吗?
在数据库设计中,选择合适的数据类型对于确保数据的有效存储和查询效率至关重要。对于需要存储文本信息的场景,我们常会使用VARCHAR类型。 然而,对于不同语言的字符,VARCHAR所能存储的数量会有所不同。
烟雨平生
2024/04/17
3.9K0
MySQL | VARCHAR(200)能存200个汉字吗?
MySQL字符集
3、字符无需区分大小写时,采用默认的xx_ci校验集可以,否则选择xx_bin校验集(生产环境中,尽量不要修改校验集)
星哥玩云
2022/08/18
4K0
帮你彻底弄懂常见的中文字符编码
| 导语 本文主要介绍了业务中常见的ASCII、GB2312、GBK、GB18030、UTF8、ANSI、Latin1中文编码。如果你在业务中也曾经被乱码搞晕过,不妨我们一起探究一下。 PS:文末有今天儿童节粉丝福利活动哦! 最近我的业务中涉及到了包含中文文本的内容解析。业务场景是用户上传一个包含中文的文本文件,我们需要根据约定好的字段格式解析该文本,并将内容导入到数据库中。但用户所传上来的文件中文编码经常会不一样,于是我们的数据库中经常会有乱码出现。为了解决该问题,就有了这篇文章…… 1、字符编码要做
腾讯NEXT学位
2020/06/02
3.5K0
MySQL字符编码指南--基础篇
要了解MySQL的字符编码,解决乱码问题,必须先了解字符编码。我们知道所谓信息,在计算机中不过是一串的位(bit:0 or 1),每8个bit组成了一个字节,而这些字节到底表示什么,取决于读到这些对象的上下文,1个字节序列,可以表示整数,字符串或者机器指令,当然也可以表示中文,日文,甚至上古文字。
DBA成江东
2023/07/15
9120
MySQL字符编码指南--基础篇
关于字符编码的那些事
一、编码是什么 编码为了某种目的把信息从一种形式集合转换为另一种形式集合的过程,古时的鸣金收兵,从某种意义上讲也是一种编码,将帅发出了退兵的命令,为了让更多的人能够知道这个命令,传令兵把这个信息转换为了锣声,传递了出去 与编码相对的还有解码,解码是根据某种规则将信息恢复到原状的过程,士兵之前都接收过训练,在听到锣声之后,明白到锣声代表退兵,便开始执行这一命令。 旗语,电报中的莫斯电码等等,这些东西里面也包含了编码 二、关于字符集和字符编码 因为计算机中的信息都是用二进制数表示的,所以我们必须将汉字、英文按照
magicsoar
2018/02/06
1K0
关于字符编码的那些事
Mysql如何查字段的长度,Mysql中length()、char_length()的区别
1、今天发生了一件有意思的事情,传输的数据大于标准定的字段长度了,我把字段长度调大了,把数据传输过来了。谁知道,人家的数据不符合标准,要删除了重新搞,那么你如何将超长的数据删除呢,或者将超长的数据查询出来。
别先生
2020/03/19
4.8K0
MySQL中length()、char_length()的区别和用法
(4)通过length()<>char_length()可以用来检验是否含有中文字符
陈哈哈
2020/07/03
4.5K0
各种字符编码详解
serena
2017/09/19
2.1K0
各种字符编码详解
为什么不建议在MySQL中使用 utf8 ?
MySQL 字符编码集中有两套 UTF-8 编码实现:utf8 和 utf8mb4。
Guide哥
2021/10/21
1.2K0
精述字符编码
带你了解ASCII,Latin1,ANSI,Unicode,UCS-2,UCS-4,UTF-8,UTF-16,UTF-32,GB2312,GB13000,GBK,GB18030,BIG5,BMP,Code Page,BOM,MBCS,Little Endian,Big Endian,内码,外码。
恋喵大鲤鱼
2018/08/03
1.6K0
精述字符编码
MySQL 怎么存文本不乱码?
好了,有个字符集为UTF8MB4的表中想存储各类不同字符集的文本,有哪些注意事项亿避免乱码?
阿炳数记
2019/02/27
2K0
网络编程常用的几种字符编码
如果你不知道用什么字符集,用 UTF-8,如果没有强制要求,也用 UTF-8,相信我,没错的。
HoneyMoose
2022/07/02
1K0
网络编程常用的几种字符编码
从"锟斤拷"到字符编码
我们经常看一些谍战剧,谍战剧里敌特、地下党员以及八路军各部间发送情报的时候,一般都是通过电报发送的,电报在传递的过程中,需要发报员用电键发出长短不一的电码,收报员就会听到电报机发出的滴滴滴答答答的声音。其实电报发出的声音都是"滴"和"答"的组合,"答"的声音是"滴"的三倍长。
Java3y
2019/08/29
1.2K0
从"锟斤拷"到字符编码
前端工程师也应知道的字符编码知识
最开始计算机只在美国用,八位的字节可以组合出256种不同状态。0-32种状态规定了特殊用途,一旦终端、打印机遇上约定好的这些字节被传过来时,就要做一些约定的动作,如:
coder_koala
2019/07/30
1.4K0
你所不了解的字符编码
前言 在我的工作中,常常会遇到形形色色的字符编码,对于各种编码技术本人了解的也不是很多。 本篇是我了解编码系列的开篇,主要内容讲述字符编码的基本概念,然后介绍一下常见的字符编码,最后说明一下 Java
BUG弄潮儿
2021/06/25
1.1K0
你所不了解的字符编码
字符编码
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://polaris.blog.51cto.com/1146394/377468
拾点阳光
2018/09/28
2.3K0
字符编码详解及由来
真空管时代的计算机尽管已经步入了现代计算机的范畴,但其体积之大、能耗之高、故障之多、价格之贵大大制约了它的普及应用。直到1947年,由Bell实验室的William B. Shockley、 John Bardeen和Walter H. Brattain.发明了晶体管,开辟了电子时代新纪元,电子计算机也找到了腾飞的起点,一发而不可收……
黄规速
2022/04/14
9550
字符编码详解及由来
【字符编码那些事】ASCII、GB2312、GBK、UTF-8编码以及Unicode字符集
我们在开发中是不是经常会遇到这样的问题,比如你在VS2019中创建了一个工程,里面有C语言程序和中文注释,有一天,根据工作需要,你要把其中的一部分C文件和H文件移植到Keil工程中,当你通过复制黏贴把相应文件移植到Keil工程中,并使用MDK打开时,却发现,你移植的文件C语言程序是正常显示的,但是中文却成了一堆乱码,并且一编译各种莫名其妙的报错。这其实就有可能是你的VS2019和Keil使用了不同的编码方式,因为大部分编码兼容ASCII编码,而C语言程序是英文字符,采用了ASCII编码,所以正常显示,而中文编码就不同了,比如内存中同样的0xB0A1,使用不同编码标准去对0xB0A1解码,得到的可能就是不同的汉字。
mindtechnist
2024/08/08
2.2K0
【字符编码那些事】ASCII、GB2312、GBK、UTF-8编码以及Unicode字符集
MySQL怎么存文本不乱码?
我在“UTF8字符集的表怎么直接转UTF8MB4”一文中介绍了如何把表字符集由UTF8直接转换成UTF8MB4的几种方法。
阿炳数记
2019/04/24
1.8K0
字符集和字符编码
我们都知道在计算机内部,所有的数据在存储和运算的时候都应该使用二进制进行表示。例如字母,数字等等。通过二进制进行表示,我们可以指定很多规则来表示这些字符,为了避免不一致性,美国国家标准学会(American National Standard Institute , ANSI )制定了 ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)编码。
用户7657330
2020/08/14
1.2K0
相关推荐
MySQL | VARCHAR(200)能存200个汉字吗?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验