01MySQL数据类型概述根据MySQL官方文档MySQL的主要数据类型分为数值、日期时间、字符串、空间和JSON五大类这些类型在各个应用中有着广泛的使用。▲ 五大类数据类型数值型 (Numeric Types)日期与时间型 (Date and Time Types)字符串型 (String Types)空间数据类型 (Spatial Data Types)JSON数据类型 (JSON Data Types)02字符串型数据类型▲ CHAR和VARCHARCHAR为定长字符串存储时会填充空格。对于CHAR类型的列其长度在创建表时就被固定声明这一长度范围可以从0一直到255。当存储CHAR值时MySQL会在其右侧用指定数量的空格进行填充。但在检索CHAR值时这些尾部的空格通常会被默认删除除非启用了pad_char_to_full_length sql模式。VARCHAR为变长字符串存储方式为前缀数据。VARCHAR类型的列可以存储可变长度的字符串其最大长度可以指定在0到65535的范围内。然而其实际最大长度会受到最大行大小65535字节以及所使用的字符集的限制。max_length对于VARCHAR值的存储其方式为前缀的使用基于值的实际长度进行调整。例如若值不超过255个字节则前缀长度为1字节总存储长度为数据长度加上前缀长度。▲ BINARY与VARBINARYBINARY与VARBINARY用于存储二进制字符串处理字节而非普通字符。这两种类型与CHAR和VARCHAR不同它们设计用于存储字节字符串最大长度的单位是字节而非字符。此外BINARY和VARBINARY类型配备了专门的二进制字符集和排序规则确保了基于字节数值的比较和排序的准确性。▲ BLOB与TEXTBLOB用于存储二进制数据TEXT用于普通字符串。BLOB即二进制大对象被设计用于存储可变长度的二进制数据并提供四种不同的类型TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB不同的类型允许存储从不同长度的数据。另一方面TEXT类型用于存储非二进制字符串这些值拥有独特的字符集并依据该字符集的排序规则进行值的排序和比较。▲ ENUM枚举类型ENUM枚举类型的值必须来自创建时指定的列表。这一类型是一种字符串对象其值必须来自表创建时列规范中明确列举的允许值列表。例如我们可以定义一个shirts表的size字段为 ENUM类型并指定可取值为x-small、small、medium等。需要注意的是ENUM并不适合作为数值类型的替代方案尤其是当需要存储大量不同的值时因为MySQL建议避免使用数字作为枚举值。▲ SET集合SET集合允许有零个或多个来自指定列表的值。这是一种字符串对象元素之间以空格分隔。创建表时SET类型的列可以包含多个元素而插入数据时元素的顺序不重要存储时会按照创建表时指定的顺序进行。然而与ENUM不同SET中的元素在检索时会按照指定的顺序列出不同的值组合会影响检索时的显示。总体来说MySQL的数据类型设计充分考虑了各种数据存储的需求提供了丰富的选择以更精确地管理各类信息。