VARCHAR和CHAR有什么区别?

MySQL中的VARCHAR和CHAR有什么区别?

我正在尝试存储MD5哈希。

VARCHAR是可变长度的。

CHAR是固定的长度。

如果你的内容是一个固定的大小,你会得到更好的performance与CHAR

请参阅CHAR和VARCHARtypes的MySQL页面以获得详细解释(请务必阅读注释)。

CHAR

  1. 用于存储固定长度的string值。

  2. 最大数量 数据types可容纳的字符数255个字符

  3. 它比VARCHAR 快50%

  4. 使用静态内存分配

VARCHAR

  1. 用于存储可变长度的字母数字数据。

  2. 这个数据types可以容纳的最大值是

  3. Pre-MySQL 5.0.3: 255个字符
  4. 在MySQL 5.0.3+中:该行共享65,535个字符

  5. 这比CHAR

  6. 使用dynamic内存分配*

CHAR Vs VARCHAR

CHAR用于固定长度大小variables
VARCHAR用于可变长度大小variables。

例如

 Create table temp (City CHAR(10), Street VARCHAR(10)); Insert into temp values('Pune','Oxford'); select length(city), length(street) from temp; 

输出将是

 length(City) Length(street) 10 6 

结论:要有效地使用存储空间,必须使用VARCHAR而不是CHAR,如果variables长度是可变的

CHAR(x)列只能有x字符。
VARCHAR(x)列最多可以包含x字符。

由于你的MD5散列总是相同的大小,你应该使用CHAR

但是,你不应该首先使用MD5。 它已经知道了弱点。
改用SHA2。
如果你正在哈希密码,你应该使用bcrypt。

MySQL中的VARCHAR和CHAR有什么区别?

为了给出答案,我想补充一点,在OLTP系统或频繁更新的系统中,考虑在可变大小的列中使用CHAR ,因为在更新过程中可能存在VARCHAR列碎片。

我正在尝试存储MD5哈希。

如果安全真的很重要的话,MD5散列并不是最好的select。 然而,如果你将使用任何散列函数,考虑它的BINARYtypes(例如,MD5将产生16字节的散列,所以BINARY(16)将代替CHAR(32)足够的CHAR(32)个字符代表hex数字,这将节省更多的空间和性能有效。

在今天的大多数RDBMS中,它们是同义词。 但是对于那些仍然有区别的系统,CHAR字段被存储为一个固定宽度的列。 如果将其定义为CHAR(10),则将10个字符写入表中,其中使用“填充”(通常是空格)来填充数据未使用的任何空间。 例如,保存“bob”将被保存为(“bob”+7个空格)。 一个VARCHAR(可变字符)列是为了存储数据而不浪费CHAR列所做的额外空间。

与往常一样, 维基百科的声音更大。

如果input的字符短于声明的长度,则Varchar将切断尾随空格,而char则不会。 Char将填充空格,并且将始终是声明长度的长度。 在效率方面,varchar比较擅长,因为它可以调整字符以进行更多的调整。 但是,如果你知道char的确切长度,char将以更快的速度执行。

要查看更多详细信息,请查看:

http://www.allthingsdiscussed.com/More/Difference-between-char-and-varchar-in-mysql

CHAR是一个固定长度的字段; VARCHAR是一个可变长度字段。 如果要存储string的variables长度(例如名称),则使用VARCHAR(如果长度始终相同),则使用CHAR,因为它的尺寸效率稍高一些,而且速度稍快。

以下是CHAR和VARCHAR的区别:

  1. CHAR和VARCHARtypes在存储和检索方面有所不同。
  2. CHAR列的长度固定为创build表时声明的长度。 长度值的范围是1到255。
  3. 当CHAR值被存储时,它们被用空格填充到特定的长度。 检索CHAR值时删除尾随空格。

CHAR是固定长度,VARCHAR是可变长度。 CHAR总是使用每个条目相同数量的存储空间,而VARCHAR只使用存储实际文本所需的数量。

这个来自www.mssqlcity.com的回答似乎很好地总结了这一点:

char是一个固定长度的字符数据types,varchar是一个可变长度的字符数据types。

由于char是固定长度的数据types,因此char值的存储大小等于此列的最大大小。 由于varchar是可变长度数据types,因此varchar值的存储大小是input数据的实际长度,而不是此列的最大大小。

当列中的数据条目预计具有相同的大小时,可以使用char。 当列中的数据条目预计在大小上有很大差异时,可以使用varchar。

Char有一个固定的长度(支持2000个字符),它代表字符是一种数据types

Varchar具有可变长度(支持4000个字符)

CHAR vs VARCHAR

CHAR数据types:

它是一个固定长度的数据types如果提供给CHAR数据types的variables的值比声明variables大小的列的长度短,则该值将用空格右填充以匹配列的大小长度。

DECLARE @string CHAR(20)
SET @string ='Vicky'
SELECT @string AS'String',DATALENGTH(@string)AS'Datalength',LEN(@string)AS'Len'

如上所示,即使字符长度为5,variables占用的字节数也是20,这意味着无论存储在列中的字符如何,它都将占用所有字节来存储该值。

VARCHAR数据types:

它是一个可变长度的数据typesDECLARE @string VARCHAR(20)
SET @string ='Vicky'
SELECT @string AS'String',DATALENGTH(@string)AS'Datalength',LEN(@string)AS'Len'

正如你在上面看到的,它将DATALENGTH显示为5,这意味着它将只使用等于字符数的字节数。 这将使我可以避免浪费数据库空间。

何时使用什么? 如果您确定要为任何特定列捕获的数据的固定长度,那么请使用CHAR数据types,如果数据可能不同,则使用VARCHAR。

char或varchar-用于input文本数据,长度可以用括号括起来Eg- name char(20)

CHAR:

  • 支持字符和数字。
  • 支持2000个字符
  • 固定长度。

VARCHAR:

  • 支持字符和数字。
  • 支持4000个字符
  • 可变长度。

任何意见……!!!!