13.6 VARCHAR

本教程将向您介绍MySQL VARCHAR数据类型,并讨论VARCHAR的一些重要功能。

MySQL VARCHAR数据类型简介

MySQL VARCHAR是可变长度的字符串,其长度可以达到65,535个字符。 MySQL将VARCHAR值作为1字节或2字节长度前缀加上实际数据。

长度前缀指定值的字节数。 如果列需要少于255个字节,则长度前缀为1个字节。 如果列需要超过255个字节,长度前缀是两个长度字节。

但是,最大长度受到最大行大小(65,535字节)和所使用的字符集的限制。 这意味着所有列的总长度应该小于65,535字节。

下面我们来看一个例子。

创建一个新的表,它有两列s1s2,长度分别为32765(长度前缀为+2)和32766(+2)。注意,32765 + 2 + 32766 + 2 = 65535,这是最大行大小。

USE testdb;

CREATE TABLE IF NOT EXISTS varchar_test (
    s1 VARCHAR(32765) NOT NULL,
    s2 VARCHAR(32766) NOT NULL
)  CHARACTER SET 'latin1' COLLATE LATIN1_DANISH_CI;

该语句成功创建了表。 但是,如果我们将s1列的长度增加1

USE testdb;

CREATE TABLE IF NOT EXISTS varchar_test_2 (
    s1 VARCHAR(32766) NOT NULL, -- error
    s2 VARCHAR(32766) NOT NULL
)  CHARACTER SET 'latin1' COLLATE LATIN1_DANISH_CI;

MySQL将发出错误消息:

如上所示,行长度太大,所以创建语句失败。

如果插入长度大于VARCHAR列长度的字符串,MySQL将发出错误。 请考虑以下示例:

在这个例子中,MySQL发出以下错误消息:

MySQL VARCHAR和空格

当MySQL存储VARCHAR值时,MySQL不会占用空间。 此外,MySQL在插入或选择VARCHAR值时保留尾随空格。请参阅以下示例:

查询插入字符串值的长度,如下所示 -

但是,当插入包含导致列长度超过的尾随空格的VARCHAR值时,MySQL将截断尾随空格。 此外,MySQL发出警告。我们来看下面的例子:

此语句将长度为4的字符串插入标title列。 MySQL仍然插入字符串,但是在插入该值之前会截断尾随空格。

可以使用以下查询来验证它:

在本教程中,您已经学习了如何使用MySQL VARCHAR数据类型来存储数据库中的可变长度字符串的值。

Last updated

Was this helpful?