3

我理解 CHAR 和 VARCHAR 之间的区别,一个是固定长度,另一个是可变长度,如果一行中的所有字段都是固定长度的,那么表通常会表现得更好。

但是,我不清楚的是,如果我给 VARCHAR 一个长度,例如 VARCHAR(500),这是否会将行保留为固定长度?

对于上下文,我有一个包含 50 列的干净表,主要是 TINYINT,但我需要该表中的两列作为 VARCHAR,因为它们每列最多需要存储 500 个字符。确切的长度取决于用户输入,因此未知。

作为附加条件,我真的不想将这些 VARCHAR 字段放入单独的引用表中,因为它会产生不必要的连接并且不能非常有效地符合预期的查询模式。

任何帮助,将不胜感激。谢谢。

4

2 回答 2

6

显然不是,否则它首先不会被称为可变长度。它所做的只是限制您可以存储在该列中的字符串的最大长度。在其他更可靠的数据库引擎上,长度超过最大值的字符串会产生错误,但 MySQL 只会截断多余的数据:

mysql> create table t (a varchar(3));
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t values ('abc'), ('defgh');
Query OK, 2 rows affected, 1 warning (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 1

mysql> select * from t;
+------+
| a    |
+------+
| abc  |
| def  |
+------+
2 rows in set (0.00 sec)
于 2010-01-06T18:00:01.920 回答
1

不,它只是设置最大尺寸。

CHAR 和 VARCHAR 类型的声明长度表示要存储的最大字符数。例如,CHAR(30) 最多可容纳 30 个字符。

于 2010-01-06T17:59:30.360 回答