MySQL中的VARCHAR和CHAR有什么区别?
我正在尝试存储MD5哈希。
MySQL中的VARCHAR和CHAR有什么区别?
我正在尝试存储MD5哈希。
当前回答
CHAR Vs VARCHAR
CHAR用于固定长度大小变量 VARCHAR用于可变长度大小变量。
E.g.
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来有效地利用存储空间
其他回答
VARCHAR是可变长度的。
CHAR是固定长度。
如果您的内容是固定大小的,那么使用CHAR将获得更好的性能。
请参阅MySQL页面上关于CHAR和VARCHAR类型的详细解释(一定要阅读注释)。
一个CHAR(x)列只能有x个字符。 一个VARCHAR(x)列最多可以有x个字符。
由于你的MD5哈希值总是相同的大小,你可能应该使用CHAR。
然而,你不应该首先使用MD5;它的弱点是众所周知的。 请改用SHA2。 如果要对密码进行哈希,则应该使用bcrypt。
CHAR是固定长度,VARCHAR是可变长度。CHAR总是对每个条目使用相同数量的存储空间,而VARCHAR只使用存储实际文本所需的空间。
MySQL中的VARCHAR和CHAR有什么区别?
对于已经给出的答案,我想补充一点,在OLTP系统或频繁更新的系统中,即使对于可变大小的列也可以考虑使用CHAR,因为在更新期间可能会出现VARCHAR列碎片。
我正在尝试存储MD5哈希。
如果安全性真的很重要,MD5哈希并不是最好的选择。然而,如果您将使用任何哈希函数,请考虑使用BINARY类型代替它(例如,MD5将产生16字节哈希,因此BINARY(16)将足够代替CHAR(32)用于表示十六进制数字的32个字符。这将节省更多空间并提高性能。
CHAR
CHAR是一个固定长度的字符串数据类型,因此字段中的任何剩余空间都用空格填充。 CHAR每个字符占用1个字节。因此,一个CHAR(100)字段(或变量)在磁盘上占用100个字节,而不管它所包含的字符串是什么。
VARCHAR
VARCHAR是一种可变长度的字符串数据类型,因此它只保存您分配给它的字符。 VARCHAR每个字符占用1个字节,+ 2个字节保存长度信息(例如,如果你设置VARCHAR(100)数据类型= ' Dhanika ',那么它将占用7个字节(对于D, H, a, N, I, K和a)加上2个字节,或总共9个字节)。