SQL数据类型
一、MySQL常用数据类型
1、串数据类型(string)
串:即【字符序列】,是【一串字符】。
字符:类字形单位或符号,包括字母、数字、运算符号、标点符号和其他符号,以及一些功能性符号。
比如:一个字符可以是一个中文汉字、一个英文字母、一个阿拉伯数字、一个标点符号、一个图形符号或者控制符号等。
mysql默认utf8,一个英文一个字节,一个中文3个字节。
mysql遵循了ANSI SQL标准,同样分为定长串 和变长串。
数据类型 | 最大存储大小 | 特点 | 适用场景 |
---|---|---|---|
CHAR(n) | 0-255 bytes | 定长,长度确定才用,否则浪费空间(空位空格填充)。占用空间固定 | 如国家代码、身份证号 |
VARCHAR(n) | 0-65535 bytes | 变长慢。不允许索引。 | 如用户昵称、电子邮件 |
VARCHAR 可以索引整个字段,适用于需要频繁搜索的文本字段。 | |||
TEXT 不支持 默认值,也无法使用 索引(仅支持前缀索引),但可以存储大量文本。 |
较长的文本
数据类型 | 最大存储大小 | 特点 | 适用场景 |
---|---|---|---|
TINYTEXT | 255 字节 | 短文本,如推文内容 | |
TEXT | 65,535 字节(64KB) | 文章内容、评论 | |
MEDIUMTEXT | 16,777,215 字节(16MB) | 书籍、日志记录 | |
LONGTEXT | 4GB | 超长文本,如百科条目 |
较长的二进制数据
数据类型 | 最大存储大小 | 特点 | 适用场景 |
---|---|---|---|
TINYBLOB | 255 字节 | 小二进制数据,如图片缩略图 | |
BLOB | 65,535 字节(64KB) | 图片、音频 | |
MEDIUMBLOB | 16 777 215 bytes(16MB) | 大型媒体文件 | |
LONGBLOB | 4 294 967 295 bytes(4GB) | 超大文件,如电影 |
2、二进制数据类型(存字节)
3、数值数据类型(number)
整数类型
数据类型 | 存储大小 | 取值范围(无符号) | 适用场景 |
---|---|---|---|
TINYINT | 1 字节 | 0 ~ 255 | 布尔值(0/1)、评分 |
SMALLINT | 2 字节 | 0 ~ 65,535 | 小范围数值,如年龄 |
MEDIUMINT | 3 字节 | 0 ~ 16,777,215 | 适用于 ID、自增字段 |
INT(INTEGER) | 4 字节 | 0 ~ 4,294,967,295 | 适用于大部分场景,如用户 ID |
BIGINT | 8 字节 | 0 ~ 18,446,744,073,709,551,615 | 适用于超大数值,如银行账户余额 |
浮点与定点类型
数据类型 | 存储大小 | 适用场景 | |
---|---|---|---|
FLOAT(M, D) | 4 字节 | 适用于非严格精度的计算,如游戏评分 | 非关键计算(如统计数据)可使用 |
DOUBLE(M, D) | 8 字节 | 高精度计算,如科学计算 | |
DECIMAL(M, D)(NUMERIC) | 可变 | 财务类数据使用 DECIMAL,避免计算误差。 |
4、日期和时间数据类型 (date)
数据类型 | 存储大小 | 取值范围 | 适用场景 | |
---|---|---|---|---|
DATE | 3 字节 | 1000-01-01 ~ 9999-12-31 | 生日、订单日期 | |
DATETIME | 8 字节 | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | 需要精确到秒的时间,如创建时间 | DATETIME 不受时区影响,适合存储固定时间。 |
TIMESTAMP | 4 字节 | 1970-01-01 00:00:01 ~ 2038-01-19 03:14:07 | 适用于存储 Unix 时间戳 | TIMESTAMP 受时区影响,适合存储事件发生时间。 |
TIME | 3 字节 | -838:59:59 ~ 838:59:59 | 记录时间间隔 | |
YEAR | 1 字节 | 1901 ~ 2155 | 适用于年份数据 |
5、枚举与集合类型
ENUM 枚举类型,用于存储单一值,可以选择一个预定义的集合。 接受最多64 K 个串组成的一个预定义集合的某个串。
SET 集合类型,用于存储多个值,可以选择多个预定义的集合。 接受最多64个串组成的一个预定义集合的零个或多个串
6、空间数据类型
用于存储空间数据(地理信息、几何图形等)。
GEOMETRY
POINT
LINESTRING
POLYGON
MULTIPOINT
MULTILINESTRING
MULTIPOLYGON
GEOMETRYCOLLECTION
选择数据类型的最佳实践
- 能用整数就不要用字符串(如性别可用 TINYINT)。
- 存储金额、财务数据时,使用 DECIMAL 而非 FLOAT。
- 短文本(<255 字符)用 VARCHAR,长文本用 TEXT。
- 索引字段尽量避免 TEXT 和 BLOB,影响查询性能。
- 时间戳数据尽量使用 TIMESTAMP 代替 DATETIME,节省存储空间。