MySQL中的VARCHAR和CHAR有什么区别?
我正在尝试存储MD5哈希。
MySQL中的VARCHAR和CHAR有什么区别?
我正在尝试存储MD5哈希。
当前回答
MySQL中的VARCHAR和CHAR有什么区别?
对于已经给出的答案,我想补充一点,在OLTP系统或频繁更新的系统中,即使对于可变大小的列也可以考虑使用CHAR,因为在更新期间可能会出现VARCHAR列碎片。
我正在尝试存储MD5哈希。
如果安全性真的很重要,MD5哈希并不是最好的选择。然而,如果您将使用任何哈希函数,请考虑使用BINARY类型代替它(例如,MD5将产生16字节哈希,因此BINARY(16)将足够代替CHAR(32)用于表示十六进制数字的32个字符。这将节省更多空间并提高性能。
其他回答
CHAR
用于存储固定长度的字符串值。 最大数目。数据类型可以容纳255个字符。 它比VARCHAR快50%。 使用静态内存分配。
VARCHAR
用于存储可变长度的字母数字数据。 此数据类型所能容纳的最大值是 Pre-MySQL 5.0.3: 255个字符。 后mysql 5.0.3:为行共享65,535个字符。 它比CHAR慢。 使用动态内存分配。
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个字节)。
CHAR
使用特定的内存分配 时间效率
VARCHAR
使用动态分配内存 记忆效率
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来有效地利用存储空间
Char或varchar-用于输入文本数据,长度可以用括号表示 Eg- name char (20)