VARCHAR和CHAR有什么区别?
MySQL中的VARCHAR和CHAR有什么区别?
我正在尝试存储MD5哈希。
VARCHAR
是可变长度的。
CHAR
是固定的长度。
如果你的内容是一个固定的大小,你会得到更好的performance与CHAR
。
请参阅CHAR和VARCHARtypes的MySQL页面以获得详细解释(请务必阅读注释)。
CHAR
-
用于存储固定长度的string值。
-
最大数量 数据types可容纳的字符数为255个字符 。
-
它比VARCHAR 快50% 。
-
使用静态内存分配 。
VARCHAR
-
用于存储可变长度的字母数字数据。
-
这个数据types可以容纳的最大值是
- Pre-MySQL 5.0.3: 255个字符 。
-
在MySQL 5.0.3+中:该行共享65,535个字符 。
-
这比CHAR 慢 。
-
使用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。 然而,如果你将使用任何散列函数,考虑它的BINARY
types(例如,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的区别:
- CHAR和VARCHARtypes在存储和检索方面有所不同。
- CHAR列的长度固定为创build表时声明的长度。 长度值的范围是1到255。
- 当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个字符
- 可变长度。
任何意见……!!!!