Char và varchar khác nhau như thế nào

Highest score (default) Trending (recent votes count more) Date modified (newest first) Date created (oldest first)
VARCHAR is variable-length.

Bạn đang xem: Char và varchar khác nhau như thế nào

CHAR is fixed length.

If your nội dung is a fixed size, you"ll get better performance with CHAR.

See the MySQL page on CHAR and VARCHAR Types for a detailed explanation (be sure lớn also read the comments).




Used khổng lồ store character string value of fixed length.The maximum no. Of characters the data type can hold is 255 characters.It"s 50% faster than VARCHAR.Uses static memory allocation.


Used lớn store variable length alphanumeric data.The maximum this data type can hold is up toPre-MySQL 5.0.3: 255 characters.Post-MySQL 5.0.3: 65,535 characters shared for the row.It"s slower than CHAR.Uses dynamic memory allocation.



CHAR is used for Fixed Length kích cỡ VariableVARCHAR is used for Variable Length form size Variable.


Create table temp(City CHAR(10),Street VARCHAR(10));Insert into tempvalues("Pune","Oxford");select length(city), length(street) from temp;Output will be

length(City) Length(street)10 6Conclusion: lớn use storage space efficiently must use VARCHAR Instead CHAR if variable length is variable


A CHAR(x) column can only have exactly x characters.A VARCHAR(x) column can have up to x characters.

Since your MD5 hashes will always be the same size, you should probably use a CHAR.

However, you shouldn"t be using MD5 in the first place; it has known weaknesses.Use SHA2 instead.If you"re hashing passwords, you should use bcrypt.

What"s the difference between VARCHAR and CHAR in MySQL?

To already given answers I would like to add that in OLTP systems or in systems with frequent updates consider using CHAR even for variable kích thước columns because of possible VARCHAR column fragmentation during updates.

I am trying lớn store MD5 hashes.

MD5 hash is not the best choice if security really matters. However, if you will use any hash function, consider BINARY type for it instead (e.g. MD5 will produce 16-byte hash, so BINARY(16) would be enough instead of CHAR(32) for 32 characters representing hex digits. This would save more space & be performance effective.

Varchar cuts off trailing spaces if the entered characters is shorter than the declared length, while char will not. Char will pad spaces & will always be the length of the declared length. In terms of efficiency, varchar is more adept as it trims characters khổng lồ allow more adjustment. However, if you know the exact length of char, char will execute with a bit more speed.

Xem thêm: Bài 25 Lịch Sử 9 - Lý Thuyết Sử 9: Bài 25

CHAR is fixed length and VARCHAR is variable length. CHAR always uses the same amount of storage space per entry, while VARCHAR only uses the amount necessary khổng lồ store the actual text.

CHAR is a fixed length field; VARCHAR is a variable length field. If you are storing strings with a wildly variable length such as names, then use a VARCHAR, if the length is always the same, then use a CHAR because it is slightly more size-efficient, and also slightly faster.

In most RDBMSs today, they are synonyms. However for those systems that still have a distinction, a CHAR field is stored as a fixed-width column. If you define it as CHAR(10), then 10 characters are written khổng lồ the table, where "padding" (typically spaces) is used lớn fill in any space that the data does not use up. For example, saving "bob" would be saved as ("bob"+7 spaces). A VARCHAR (variable character) column is meant to lớn store data without wasting the extra space that a CHAR column does.

As always, Wikipedia speaks louder.


CHAR is a fixed length string data type, so any remaining space in the field is padded with blanks.CHAR takes up 1 byte per character. So, a CHAR(100) field (or variable) takes up 100 bytes on disk, regardless of the string it holds.


VARCHAR is a variable length string data type, so it holds only the characters you assign to it.VARCHAR takes up 1 byte per character, + 2 bytes to hold length information (For example, if you mix a VARCHAR(100) data type = ‘Dhanika’, then it would take up 7 bytes (for D, H, A, N, I, K & A) plus 2 bytes, or 9 bytes in all.)

Uses specific allocation of memoryTime efficient


Uses dynamic allocation of memoryMemory efficient
The char is a fixed-length character data type, the varchar is a variable-length character data type.

Because char is a fixed-length data type, the storage kích cỡ of the char value is equal khổng lồ the maximum kích thước for this column. Because varchar is a variable-length data type, the storage kích cỡ of the varchar value is the actual length of the data entered, not the maximum size for this column.

You can use char when the data entries in a column are expected khổng lồ be the same size.You can use varchar when the data entries in a column are expected to lớn vary considerably in size.

Distinguishing between the two is also good for an integrity aspect.

If you expect lớn store things that have a rule about their length such as yes or no then you can use char(1) to store Y or N. Also useful for things like currency codes, you can use char(3) to lớn store things like USD, EUR or AUD.

Then varchar is better for things were there is no general rule about their length except for the limit. It"s good for things lượt thích names or descriptions where there is a lot of variation of how long the values will be.

Then the text data type comes along & puts a spanner in the works (although it"s generally just varchar with no defined upper limit).

according lớn High Performance MySQL book:

VARCHAR stores variable-length character strings và 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 lớn 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 và 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 & older versions—CHAR and VAR CHAR were logically identical and differed only in storage format.) Values are padded with spaces as needed for comparisons.