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)