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

我正在尝试存储MD5哈希。


当前回答

区分这两者对完整性方面也有好处。

如果你希望存储有长度规则的东西,比如yes或no,那么你可以使用char(1)来存储Y或n。对于货币代码也很有用,你可以使用char(3)来存储像USD, EUR或AUD这样的东西。

varchar更适合那些除了限制长度之外没有一般规则的情况。它适用于名称或描述之类的东西,在这些地方,值的长度会有很多变化。

然后出现了文本数据类型,并在工作中使用了扳手(尽管它通常只是没有定义上限的varchar)。

其他回答

区分这两者对完整性方面也有好处。

如果你希望存储有长度规则的东西,比如yes或no,那么你可以使用char(1)来存储Y或n。对于货币代码也很有用,你可以使用char(3)来存储像USD, EUR或AUD这样的东西。

varchar更适合那些除了限制长度之外没有一般规则的情况。它适用于名称或描述之类的东西,在这些地方,值的长度会有很多变化。

然后出现了文本数据类型,并在工作中使用了扳手(尽管它通常只是没有定义上限的varchar)。

VARCHAR是可变长度的。

CHAR是固定长度。

如果您的内容是固定大小的,那么使用CHAR将获得更好的性能。

请参阅MySQL页面上关于CHAR和VARCHAR类型的详细解释(一定要阅读注释)。

char是一种定长字符数据类型,varchar是一种变长字符数据类型。

由于char是一种固定长度的数据类型,因此char值的存储大小等于此列的最大大小。因为varchar是一种变长数据类型,所以varchar值的存储大小是输入数据的实际长度,而不是该列的最大大小。

当期望列中的数据项具有相同的大小时,可以使用char。 当一个列中的数据条目在大小上有很大变化时,可以使用varchar。

CHAR是一个固定长度的字段;VARCHAR是一个变长字段。如果您存储的字符串长度变化很大,例如名称,则使用VARCHAR,如果长度总是相同,则使用CHAR,因为它的大小效率略高,也略快。

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

由于你的MD5哈希值总是相同的大小,你可能应该使用CHAR。

然而,你不应该首先使用MD5;它的弱点是众所周知的。 请改用SHA2。 如果要对密码进行哈希,则应该使用bcrypt。