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

我正在尝试存储MD5哈希。


当前回答

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来有效地利用存储空间

VARCHAR是可变长度的。

CHAR是固定长度。

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

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

根据高性能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.

如果输入的字符比声明的长度短,Varchar将截断尾随空格,而char则不会。Char将填充空格,并且始终是声明的长度。在效率方面,varchar更熟练,因为它修剪字符,允许更多的调整。但是,如果您知道char的确切长度,则char将以更快的速度执行。

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

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

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