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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值