Introduction to MySQL VARCHAR

In this article, we’ll take you through the VARCHAR data type.

In MySQL, the data type VARCHAR a variable-length string type, and it is different from the data type CHAR is a data type. If the type of a column is defined as VARCHAR type, the length of the content in the column is the length (number of bytes) of the content itself.


You need to specify a maximum length for VARCHAR. Here is the syntax of VARCHAR:


The parameter max_length is a numeric value indicating the maximum number of bytes for this column. If we don’t specify this value, the default value is 255. That is to say, VARCHAR is equivalent to VARCHAR(255).

When MySQL stores a VARCHAR value , MySQL uses the first 1 or 2 bytes to a store the length of the actual string content. If the value of the column is less than 255 bytes, MySQL uses ​​1 byte, otherwise uses 2 bytes.

The maximum allowed length of VARCHAR is 65535 bytes, which is also the row size limit in MySQL.

In MySQL, except for TEXT and BLOB columns, the row size is limited to 65535 bytes. and the VARCHAR column’s maximum length is 65535 bytes.

In addition, how many characters can be stored in a VARCHAR column is related to the character set used by the database.


Let’s look at a simple example.

We will try to create a new table with the maximum length as follows:

CREATE TABLE test_varchar_latin1 (v VARCHAR(65535))

Note here that we are using a character set latin1. At this point, MySQL will issue an error message:

Error Code: 1118. Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs

Here, since there are 2 bytes used for the VARCHAR length prefix, we can only set it to max VARCHAR(65532).

Now let’s look at another example using utf8 encoding :

CREATE TABLE test_varchar_utf8 (v VARCHAR(65535))

MySQL will issue an error message like the following:

Error Code: 1074. Column length too big for column 'v' (max = 21845); use BLOB or TEXT instead

This is because each utf8 character takes up to 3 bytes, so: 65535 / 3 = 21845.

VARCHAR truncate content

When the inserted content exceeds the length defined by the VARCHAR column , MySQL adopts the following strategy:

  • If the excess contains only spaces, the extra spaces are truncated.
  • If the excess part is not just a space, an error message is given.

First, let’s create a test table with only one field v defined as VARCHAR(2):

CREATE TABLE test_varchar (v VARCHAR(2))

Let’s insert a value 'A ' that contains 2 spaces and has a total length of 3.

INSERT INTO test_varchar
VALUES ('A  ')
1 row(s) affected, 1 warning(s): 1265 Data truncated for column 'v' at row 1

The insertion is successful here, but MySQL gives a truncation prompt.

Let’s take one more value 'ABC', it’s length 3.

INSERT INTO test_varchar
Error Code: 1406. Data too long for column 'v' at row 1

Here, inserting data fails.


In this article, we discussed MySQL data type VARCHAR and the length limitations of VARCHAR.