当前位置: 首页 > news >正文

Varchar(255)可以存255个汉字

varchar(255)能存多少汉字

在探讨varchar(255)在MySQL中能够存储多少汉字时,我们首先需要明确几个关键点,特别是关于MySQL版本对varchar类型定义的影响以及UTF-8编码的特性。

MySQL版本与varchar定义

MySQL 4.0及以下版本:在这些早期版本中,varchar(N)的定义是基于字节的,其中N指的是该字段可以存储的最大字节数。当使用UTF-8编码存储汉字时,由于一个汉字通常需要3个字节(这里简化了情况,实际上UTF-8编码下,汉字占用的字节数可以是1到4字节不等,但最常见的是3字节),因此varchar(20)在这样的设置下只能存储最多6个汉字(20字节 ÷ 3字节/汉字 ≈ 6.67,向下取整为6)。

MySQL 5.0及以上版本:从MySQL 5.0版本开始,varchar(N)的定义转变为基于字符数,其中N指的是该字段可以存储的最大字符数。这一改变使得varchar(20)能够无差别地存储20个字符,不论这些字符是数字、字母还是UTF-8编码下的汉字(每个汉字通常占用3字节)。不过,需要注意的是,虽然字段定义是基于字符数,但实际存储时仍会受到行大小限制(通常是65,535字节)和字符集编码方式的影响。

varchar(255)与汉字存储

在MySQL 8.0(继承了MySQL 5.0及以上版本的特性)中,varchar(255)意味着该字段可以存储最多255个字符。当使用UTF-8编码存储汉字时,理论上可以存储最多255个汉字(假设每个汉字都占用3字节,且忽略其他可能影响存储的因素,如字符集的具体实现差异)。然而,实际存储的字节数会根据具体汉字的UTF-8编码长度而变化,某些汉字可能占用更多字节。

UTF-8编码方式

编码方式

占用字节

说明

备注

UTF-8

每个字符最多占3个字节

汉字占3个字节

UTF-8mb4

Mysql 中保存 4 字节长度的 UTF-8 字符

5.5.3 版本以后的才支持;

utf8mb4 是 utf8 的超集,支持表情emoj;

MySQL 8.0 默认的是 utf8mb4_0900_ai_ci

0900 指的是 Unicode 校对算法版本;

ai 指的是口音不敏感。也就是说,排序时 e,è,é,ê 和 ë 之间没有区别;

ci 表示不区分大小写。也就是说,排序时 p 和 P 之间没有区别

UTF-8mb4排序字符集

排序编码方式

说明

备注

utf8mb4_unicode_ci

基于标准的 Unicode 来排序和比较,能够在各种语言之间精确排序

utf8mb4_0900_ai_ci,属于 utf8mb4_unicode_ci 中的一种

utf8mb4_general_ci

没有实现 Unicode 排序规则,在遇到某些特殊语言或者字符集,排序结果可能不一致

utf8mb4_general_ci 在比较和排序的时候更快

varchar存储占用内存

varchar类型在数据库中用于存储可变长度的字符串。其存储方式会包括两部分:一部分用于存储字符串的长度信息,另一部分则用于存储实际的字符串数据。

长度信息的存储:varchar类型使用一个或两个字节来存储字符串的长度信息。具体来说,如果字符串的长度小于或等于255个字符,那么长度信息将占用1个字节;如果字符串的长度超过255个字符,那么将需要2个字节来存储长度信息。

数据本身的存储:对于字符串数据本身,其占用的字节数取决于所使用的字符编码。以UTF-8编码为例,每个字符可能占用1到3个字节不等(取决于字符的Unicode码点)。因此,对于存储了特定数量字符的varchar字段,其数据部分的存储大小将是每个字符的字节数之和。

假设我们有一个varchar(255)字段,其中确实存储了255个字符,且这些字符在UTF-8编码下平均每个字符占用3个字节(这只是一个假设,实际情况可能因字符集而异):

长度信息:因为字符数正好是255,所以使用1个字节来存储长度。

数据本身:255个字符 * 3字节/字符 = 765字节。

因此,这个varchar(255)字段在数据库中的总占用将是:1字节(长度)+ 765字节(数据)= 766字节。

需要注意的是,这个计算是基于假设的,并且没有考虑数据库管理系统(DBMS)可能添加的任何额外开销(如对齐填充等)。实际占用的空间可能会根据使用的DBMS和配置有所不同。

原文:

In contrast to CHAR, VARCHAR values are stored as a 1-byte or 2-byte length prefix plus data. The length prefix indicates the number of bytes in the value. A column uses one length byte if values require no more than 255 bytes, two length bytes if values may require more than 255 bytes.


http://www.mrgr.cn/news/55164.html

相关文章:

  • C语言 | Leetcode C语言题解之第480题滑动窗口中位数
  • 使用Matplotlib绘制极轴散点图
  • 专家辅助证人出庭质证实务运用之技巧
  • 【文心智能体 | AI大师工坊】如何使用智能体插件,完成一款购物类智能体的开发,来体验一下我的智能体『科技君Tom』
  • Pytorch——pip下载安装pytorch慢的解决办法
  • 【嵌入式设备】蓝牙鼠标遥控器
  • 为什么互动投影墙在儿童展馆中如此受欢迎?创新互动是关键吗?
  • 【AIGC】ChatGPT提示词Prompt高效编写模式:Self-ask Prompt、ReACT与Reflexion
  • 加速应用开发:低代码平台云SaaS和源码交付模式如何选
  • 大路灯有必要买吗?五款口碑最好的护眼大路灯推荐
  • Spring security 自定义 token 身份验证
  • 学习docker第五弹------Docker容器数据卷
  • 【题解】—— LeetCode一周小结42
  • 一般HR面试程序员会问什么问题?
  • 如何在分布式环境中实现高可靠性分布式锁
  • Openlayers高级交互(4/20):手绘多边形,导出KML文件,可以自定义name和style
  • 分布式系统中的Dapper与Twitter Zipkin:链路追踪技术的实现与应用
  • 全面击破工程级复杂缓存难题
  • 温度传感器
  • Java网络编程 - headers
  • YOLOv11模型改进-注意力-引入简单无参数注意力模块SimAM 提升小目标和遮挡检测
  • 华为OD机试 - 贪心歌手 - 动态规划(Python/JS/C/C++ 2024 D卷 200分)
  • 探秘Python读取文件内容的奥秘:从入门到精通
  • 500强企业是如何进行数据安全建设的?看这篇就够了
  • javaspringbootmsyql银行客户管理系统91826-计算机毕业设计项目选题推荐(附源码)
  • 政府采购合同公告明细数据(1996-2024年)