MySQL 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將發出錯誤消息:

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 0.000 sec

如上所示,行長度太大,所以創建語句失敗。

如果插入長度大於VARCHAR列長度的字串,MySQL將發出錯誤。 請考慮以下示例:

USE testdb;

CREATE TABLE items (
    id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(3)
);

INSERT INTO items(title)
VALUES('ABCD');

在這個例子中,MySQL發出以下錯誤消息:

1406 - Data too long for column 'title' at row 1

MySQL VARCHAR和空格

當MySQL存儲VARCHAR值時,MySQL不會佔用空間。 此外,MySQL在插入或選擇VARCHAR值時保留尾隨空格。請參閱以下示例:

INSERT INTO items(title)
VALUES('AB ');

查詢插入字串值的長度,如下所示 -

SELECT
    id, title, length(title)
FROM
    items;

+----+-------+---------------+
| id | title | length(title) |
+----+-------+---------------+
|  1 | AB    |             3 |
+----+-------+---------------+
1 row in set

但是,當插入包含導致列長度超過的尾隨空格的VARCHAR值時,MySQL將截斷尾隨空格。 此外,MySQL發出警告。我們來看下麵的例子:

INSERT INTO items(title)
VALUES('ABC ');

此語句將長度為4的字串插入標title列。 MySQL仍然插入字串,但是在插入該值之前會截斷尾隨空格。

row(s) affected, 1 warning(s): 1265 Data truncated for column 'title' at row 1

可以使用以下查詢來驗證它:

SELECT
    title, LENGTH(title)
FROM
    items;

+-------+---------------+
| title | LENGTH(title) |
+-------+---------------+
| AB    |             3 |
| ABC   |             3 |
+-------+---------------+
2 rows in set

在本教學中,您已經學習了如何使用MySQL VARCHAR數據類型來存儲資料庫中的可變長度字串的值。


上一篇: MySQL數據類型 下一篇: MySQL技巧