Mysql字节长度

  • 本文关键字:字节 Mysql mysql
  • 更新时间 :
  • 英文 :


ive遇到一个网站,该网站声明如下:

例如:国家代码CHAR(3)CHARSET utf8

我们要求一个3个字符的专栏。此列所需的存储空间将使得任何3个字母的名称都必须适合。这意味着(3个字符)乘以(3个字节每个字符)=9字节的存储。所以CHAR和utf8加在一起可能不太理想。VARCHAR的性能更好:它只需要如上所述的每个字符的字节数。所以文本";abc";只需要3个字节的

文本"abc"(带utf8和char(3))需要3个字节还是9个字节?!感谢

MySQL的内部结构将CHAR字段直接放置在表结构中,例如一个简单的表,如:

create table foo (
   id int
   name char(3)
);

会产生一个看起来像的磁盘记录

xxxxccccccccc
^^^^-- 4 bytes of int storage space
    ^^^^^^^^^ 9 bytes of utf-8 char space

由于MySQL无法提前知道您将在该字符字段中存储什么类型的文本,因此它has可以假设最坏的情况,并分配3个字符的"绝对最长"utf-8文本可能需要的空间。如果没有,那么一个过长的字符串就会溢出磁盘存储,并开始在相邻的记录上乱写。

另一方面,varchar在表的原始数据中只有一个小的"stub"数据段,varchar的内容存储在其他地方。这意味着您的varchar(3)将始终占用相同数量的表空间存储,无论您使用什么类型的字符集。

相关内容

最新更新