在 MySQL 中,文本字符串类型用于存储字符数据。这些类型包括 CHAR
、VARCHAR
、TEXT
系列(如 TINYTEXT
、TEXT
、MEDIUMTEXT
和 LONGTEXT
)、ENUM
和 SET
。每种类型都有其特定的用途和存储特性。
n
,则会在右侧填充空格以达到长度 n
。哪些情况使用 CHAR 或 VARCHAR 更好
类型 | 特点 | 空间上 | 时间上 | 适用场景 |
---|---|---|---|---|
CHAR(M) | 固定长度 | 浪费存储空间 | 效率高 | 存储不大,速度要求高 |
VARCHAR(M) | 可变长度 | 节省存储空间 | 效率低 | 非CHAR的情况 |
MyISAM
数据存储引擎和数据列:MyISAM数据表,最好使用固定长度(CHAR)的数据列代替可变长度(VARCHAR)的数据列。这样使得整个表静态化,从而使数据检索更快
,用空间换时间。MEMORY
存储引擎和数据列:MEMORY数据表目前都使用固定长度的数据行存储,因此无论使用CHAR或VARCHAR列都没有关系,两者都是作为CHAR类型处理的。InnoDB
存储引擎,建议使用VARCHAR类型。因为对于InnoDB数据表,内部的行存储格式并没有区分固定长度和可变长度列(所有数据行都使用指向数据列值的头指针),而且主要影响性能的因素是数据行使用的存储总量,由于char平均占用的空间多于varchar,所以除了简短并且固定长度的,其他考虑varchar。这样节省空间,对磁盘I/O和数据存储总量比较好。CHAR
和 VARCHAR
慢。ENUM
,但允许存储多个值。CREATE TABLE example (
id INT AUTO_INCREMENT PRIMARY KEY,
fixed_char CHAR(10),
variable_char VARCHAR(255),
short_text TINYTEXT,
long_description TEXT,
gender ENUM('Male', 'Female', 'Other'),
hobbies SET('Reading', 'Traveling', 'Sports', 'Cooking')
);
INSERT INTO example (fixed_char, variable_char, short_text, long_description, gender, hobbies)
VALUES ('ABC ', 'Variable Length String', 'Short Text', 'This is a long description.', 'Male', 'Reading,Sports');
utf8
、utf8mb4
、latin1
等。CHAR
和 VARCHAR
类型的字段在存储和检索时通常比 TEXT
类型的字段更快。TEXT
类型字段更为合适。CHAR
、VARCHAR
和 TEXT
字段都可以创建索引,但 TEXT
字段的索引有一些限制(如前缀索引)。ENUM
和 SET
字段也可以创建索引,且索引效率通常较高。通过了解这些文本字符串类型及其特性,可以更好地设计数据库表结构,以满足不同应用场景的需求。