【译】MySQL char、varchar的区别

时间:2022-04-27
本文章向大家介绍【译】MySQL char、varchar的区别,主要内容包括介绍、VARCHAR、数据检索、VARCHAR、CHAR或VARCHAR?、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

本文旨在涵盖两种数据类型的相似性和差异。两者几乎相同,但在某些方面,两略有不同。

介绍

CHAR和VARCHAR几乎相同,但在存储和从数据库中检索数据的阶段,两者都不同。 对于这两种数据类型,我们必须传递length说明符,它表示字段可以保存多少数据。例如char(30)和varchar(30),这意味着这些数据类型的字段最多可以容纳30个字符。 对于CHAR,此长度可以是从0到255之间的任何值,对于VARCHAR可以是从0到65,535。但对于VARCHAR,此最大限制取决于您使用的最大行大小和字符集。 数据存储 在这两种类型中,数据的存储是非常不同的。首先是CHAR的情况。

CHAR

当值存储在CHAR字段中时,剩余的字符将用空格填充。 例如,一个字段是“name CHAR(5)”,并且您要存储只是“jack”,则实际值将存储为“jack ”。

name CHAR (5 )

  --------------------------------------- 
    value         actual_storage 
  ---- ----------------------------------- 
    'EX'          '恩'  
    'EXPER'       'EXPER' 
    '专家'      ' exper ' 
  ---------------------------------------

VARCHAR

与CHAR不同,VARCHAR只占用基于存储的数据的空间,因此,例如,如果我们有20个字节放入VARCHAR(30)的,那么这将占据基于数据大小的空间(20字节)。 VARCHAR的另一件事是,如果数据小于255个字符,则使用1个字节,对于大于255个字符的数据,则占用2个字节作为长度前缀

对于这两种数据类型,如果传递的数据大于指定的长度,MySQL将截断数据以适应创建表时指定的长度,并且将返回警告。但是,如果SQL Strict模式未启用,情况将是这样。 但是如果你想限制数据的截断,你应该在MySQL中启用严格模式。所以它会为查询生成错误。

name VARCHAR (5 )

  --------------------------------------- 
    value         actual_storage 
  ---- ----------------------------------- 
    'EX'          '恩'  
    'EXPER'       'EXPER' 
    '专家'      ' exper ' 
  ---------------------------------------

数据检索

这两种类型的数据检索也非常不同。

CHAR

如上所述,如果提供的数据较少,CHAR将向数据中添加空格,因此在检索数据时,它将删除添加的空格并提供数据。

VARCHAR

只会存储您通过查询的数据,如CHAR,它不会对数据执行任何空间删除过程。

CHAR或VARCHAR?

所以现在的问题是,哪一个使用?使用这些数据类型完全取决于需要。

  • 如果你有固定大小的数据,就像“Y”和“N”的标志。然后它将更好地使用CHAR而不是VARCHAR。原因是长度前缀与VARCHAR一起使用。 所以如果你使用VARCHAR,那么它将为“Y”和“N”存储2个字节。(即,1字节用于数据,1字节用于长度前缀),并且CHAR将仅存储仅为数据的1字节。
  • 对于大型数据集,只使用固定大小的记录,因此只能使用CHAR类型。

为什么?想象一下,MySQL想要检索集合的第10个记录。 使用VARCHAR,它必须读取第一个记录的前缀以知道第二个开始的哪个字节,等等。 只有CHAR,MySQL知道每个记录是x字节长,因此第10个记录是在10 * x字节文件。 因此,使用大型事实表时,只使用CHAR类型是一个很好的做法。 它可以大大减少您的I / O。删除空格的时间与此相比显然可以忽略不计。

原文:http://www.xpertdeveloper.com/2011/12/char-varchar-in-mysql/