希腊语大小写转换,varchar,char,text的区别
varchar, char, text的区别
1. 定长与变长的区别
char 是定长字段,长度固定;而 varchar 是变长字段,长度可变。
当插入的 char 字符串长度小于定义长度时,会用空格进行填充;
而 varchar 则按实际长度存储,并在总长度上加1字节用于记录长度。如果数据中包含空格,保存和检索时会保留这些空格。
建议:
- 对于 MyISAM 存储引擎,建议使用 char 类型,即固定长度的数据列。
- 对于 MEMORY 存储引擎,可以使用 char 或 varchar 列都没有关系,因为都会使用固定长度存储。
- 对于 InnoDB 存储引擎,建议使用 varchar 类型。
char 提供更快的存取速度,方便程序存储和查找,但它占用更多空间,因为长度固定。而 varchar 则在存取速度上较慢,但以时间换取空间的效率。
2. 存储容量的区别
对于 char,最多能存 255 个字符,与字符编码无关;而 varchar 的最大长度为 65532 个字符,具体有效长度由最大行大小和所用字符集决定。
在 MySQL 中,char、varchar 和 text 字段都可以存储字符类型的数据,char 和 varchar 可以定义最大字符长度,而 text 则不能。
数据检索效率的排行为:char > varchar > text。
具体说明:
char:方便存储定长数据,并且 char 字段上的索引效率更高。必须在佈局中定义长度,例如定义 char(10),不论存储的数据是否达到 10 个字节,都将占用 10 个字节的空间(自动用空格填充)。检索时会自动剔除右侧空格,只保留左侧空格。
varchar:用于存储变长数据,虽然存储灵活,但存储效率没有 char 高。也需在括号中定义最大长度。存储时不会填充空格,检索时尾部空格仍保留。实际长度为其值的实际长度加1字节以保存实际长度。
text:可存储可变长度的非 Unicode 数据,最大长度为 2^31-1 字符。text 列不能有默认值,存储和检索过程中不会进行大小写转换。若指定长度,将不会报错,但该长度不生效,超长数据也能正常插入。
存储空间说明:
在使用 UTF-8 字符集时,描述如下:
- 基本拉丁字母、数字和标点符号占用一个字节;
- 大多数欧洲和中东手写字母占用两个字节;
- 韩语、中文和日本象形文字占用三个字节。
结论:
- 对于经常变化的字段,推荐使用 varchar;
- 对于已知固定长度的字段,推荐使用 char;
- 超过 255 字节的字段只能使用 varchar 或 text;
- 能用 varchar 的地方不要随便使用 text;
- 尽量选择数字类型而不是字符串类型,以提高查询和连接的性能并减少存储开销;
- 如果同一张表存在多个大字段,尽量合并,无法合并时考虑分表。