数据库中的 varchar(255) 原因剖析

Posted braveln

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库中的 varchar(255) 原因剖析相关的知识,希望对你有一定的参考价值。

数据库中的 varchar(255)

mysql | ver < 4.1: VARCHAR以字节为单位存储,所以假设全部为常用汉字(UTF-8

3字节编码长度),则VARCHAR(255)共可存放约85个汉字;

MySQL | ver >= 4.1:

VARCHAR以字符为单位存储,假设输入仍然为常用汉字,则VARCHAR(255)可以存放255个汉字。 

另外,据我所知,MySQL对UTF-8的支持也仅仅限于1~3字节编码长度(Unicode:0x0000~0xFFFF),可以满足大部分需求,但是生僻字就不行了。

那么VARCHAR的最大值是多少呢?

根据官方文档,VARCHAR 最多可以是 65535 字节(这也意味着一条记录只有这一个字段,因为 MySQL 一行只能包含 65535 字节)。

然而,无法为这么长的 VARCHAR 做索引,对于 MyISAM,可以对前 1000 个字节做索引,对于 InnoDB,则只有 767 字节。(来源依据)

在varchar长度接近256时,varchar长度设置成255的好处:

1、方便InnoDB建索引,对于 MyISAM,可以对前 1000 个字节做索引,对于 InnoDB,则只有 767 字节。(来源依据)。255X3=765

2、少申请一个字节,记录字符创长度,一个8位的tinyint,可以表示的无符号数值的范围是,0-255,如果长度超过了255,需要在申请个字节

以上是关于数据库中的 varchar(255) 原因剖析的主要内容,如果未能解决你的问题,请参考以下文章

MySQL中的char与varchar详解

Varchar(255) 到 Varchar(MAX)

如何更新 Nhibernate 中的 varchar 列长度?

mysql varchar最大是多少?

<转> MySQL中采用类型varchar(20)和varchar(255)对性能上的影响

RODBC sqlQuery() 在应该返回 varchar(MAX) 时返回 varchar(255)