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

我正在尝试存储MD5哈希。


当前回答

Char有一个固定的长度(支持2000个字符),它代表字符是一种数据类型

Varchar具有可变长度(支持4000个字符)

其他回答

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

对于已经给出的答案,我想补充一点,在OLTP系统或频繁更新的系统中,即使对于可变大小的列也可以考虑使用CHAR,因为在更新期间可能会出现VARCHAR列碎片。

我正在尝试存储MD5哈希。

如果安全性真的很重要,MD5哈希并不是最好的选择。然而,如果您将使用任何哈希函数,请考虑使用BINARY类型代替它(例如,MD5将产生16字节哈希,因此BINARY(16)将足够代替CHAR(32)用于表示十六进制数字的32个字符。这将节省更多空间并提高性能。

CHAR

使用特定的内存分配 时间效率

VARCHAR

使用动态分配内存 记忆效率

在今天的大多数rdbms中,它们是同义词。然而,对于那些仍然有区别的系统,CHAR字段被存储为固定宽度的列。如果将其定义为CHAR(10),则将向表中写入10个字符,其中“填充”(通常是空格)用于填充数据未使用完的任何空间。例如,保存“bob”将被保存为(“bob”+7个空格)。VARCHAR(变量字符)列用于存储数据,而不像CHAR列那样浪费额外的空间。

维基百科一如既往地大声疾呼。

字符:

同时支持字符和数字。 支持2000个字符。 固定长度。

VARCHAR:

同时支持字符和数字。 支持4000字符。 可变长度。

任何评论 ......!!!!

根据高性能MySQL书:

VARCHAR stores variable-length character strings and is the most common string data type. It can require less storage space than fixed-length types, because it uses only as much space as it needs (i.e., less space is used to store shorter values). The exception is a MyISAM table created with ROW_FORMAT=FIXED, which uses a fixed amount of space on disk for each row and can thus waste space. VARCHAR helps performance because it saves space. CHAR is fixed-length: MySQL always allocates enough space for the specified number of characters. When storing a CHAR value, MySQL removes any trailing spaces. (This was also true of VARCHAR in MySQL 4.1 and older versions—CHAR and VAR CHAR were logically identical and differed only in storage format.) Values are padded with spaces as needed for comparisons.