赞
踩
MySQL支持以下几类SQL数据类型:数字类型、日期和时间类型、字符串(字符和字节)类型。本文对每个类别中类型属性、数据类型存储要求进行简单的概述。
数据类型描述使用以下约定:
对于整数类型,M表示最大显示宽度。
对于浮点和定点类型,M是可以存储的位数总数(精度)。
对于字符串类型,M是最大长度。M的最大允许值取决于数据类型。
D适用于浮点和定点类型,表示小数点(小数位数)后的位数。
- 占用存储空间:1个字节
- 默认值:0
- 长度范围:-128到127(有符号),0到255(无符号)
- 优点:占用存储空间小,适用于存储小范围整数
- 缺点:不能存储较大范围的整数
- 使用场景:适用于存储状态码、标识符等小范围整数值的情况
- 使用示例:创建一个表示性别的列,使用TINYINT数据类型存储0表示男性,1表示女性
- 占用存储空间:2个字节
- 默认值:0
- 长度范围:-32768到32767(有符号),0到65535(无符号)
- 优点:占用存储空间较小,适用于存储中等范围整数
- 缺点:不能存储较大范围的整数
- 使用场景:适用于存储年龄、数量等中等范围整数值的情况
- 使用示例:创建一个表示年龄的列,使用SMALLINT数据类型存储年龄信息
- 占用存储空间:4个字节
- 默认值:0
- 长度范围:-2147483648到2147483647(有符号),0到4294967295(无符号)
- 优点:常用的整数类型,适用于存储常规大小的整数
- 缺点:不能存储较大范围的整数
- 使用场景:适用于存储ID、数量等常规大小整数值的情况
- 使用示例:创建一个表示订单编号的列,使用INT数据类型存储订单编号信息
- 占用存储空间:8个字节
- 默认值:0
- 长度范围:-9223372036854775808到9223372036854775807(有符号),0到18446744073709551615(无符号)
- 优点:适用于存储大范围整数,可以存储非常大的整数值
- 缺点:占用存储空间较大,可能会浪费存储空间
- 使用场景:适用于存储较大范围整数值的情况,如用户ID、订单号等
- 使用示例:创建一个表示用户ID的列,使用BIGINT数据类型存储用户ID信息
- MySQL支持的整数类型所需的存储空间和使用范围
(Required Storage and Range for Integer Types Supported by MySQL)
- 参考地址:
https://dev.mysql.com/doc/refman/5.7/en/integer-types.html
- 占用存储空间:4个字节
- 默认值:0
- 优点:占用存储空间相对较小,适用于存储需要较低精度的浮点数
- 缺点:精度相对较低,可能存在舍入误差
- 使用场景:适用于存储温度、价格等不需要高精度的浮点数值的情况
- 使用示例:创建一个表示温度的列,使用FLOAT数据类型存储温度信息
- 语法:FLOAT(M,D),这里(M,D)表示总共可以存储多达M个数字的值,其中D个数字可以在小数点之后。
例如,定义为FLOAT(7,4)的列在显示时看起来像-999.9999。
MySQL在存储值时执行四舍五入,因此如果将999.00009插入FLOAT(7,4)列,则近似结果为999.0001。
- 占用存储空间:8个字节
- 默认值:0
- 优点:具有更高的精度,适用于存储需要更高精度的浮点数
- 缺点:占用存储空间较大,可能会占用更多的存储空间
- 使用场景:适用于存储GPS坐标、金融数据等需要高精度的浮点数值的情况
- 使用示例:创建一个表示经度的列,使用DOUBLE数据类型存储经度信息
- 语法:DOUBLE PRECISION(M,D),这里(M,D)表示总共可以存储多达M个数字的值,其中D个数字可以在小数点之后。
- MySQL也支持这个可选的精度规范,但FLOAT(p)中的精度值仅用于确定存储大小。
从0到23的精度会产生一个4字节的单精度(FLOAT)列。从24到53的精度产生一个8字节的双精度(double)列。
- 由于浮点值是近似值,而不是作为精确值存储,因此在比较中,试图将其视为精确值可能会导致问题。
- 为了最大限度地实现可移植性,需要存储近似数字数据值的代码应该使用FLOAT或DOUBLE PRECISION,不指定精度或位数。
- 参考地址:
https://dev.mysql.com/doc/refman/5.7/en/floating-point-types.html
- 占用存储空间:根据定义的长度而定,最多255个字节
- 默认值:空字符串
- 长度范围:0到255个字符
- 优点:存储空间固定,适用于存储长度固定的字符串
- 缺点:如果存储的字符串长度不足定义的长度,会在末尾填充空格
- 使用场景:适用于存储状态码、国家代码等长度固定的字符串的情况
- 使用示例:创建一个表示状态码的列,使用CHAR(3)数据类型存储状态码信息
- 参考地址:https://dev.mysql.com/doc/refman/5.7/en/char.html
- 占用存储空间:根据实际存储的数据长度而定,最多65535个字节
- 默认值:空字符串
- 长度范围:0到65535个字符
- 优点:占用的存储空间根据实际数据长度变化,适用于存储长度可变的字符串
- 缺点:存储空间相对较大,可能会浪费存储空间
- 使用场景:适用于存储用户输入、描述信息等长度可变的字符串的情况
- 使用示例:创建一个表示用户输入的列,使用VARCHAR(255)数据类型存储用户输入信息
- 参考地址:https://dev.mysql.com/doc/refman/5.7/en/char.html
- 占用存储空间:根据定义的长度而定,最多255个字节
- 默认值:空二进制
- 长度范围:0到255个字节
- 优点:存储空间固定,适用于存储长度固定的二进制数据
- 缺点:如果存储的二进制数据长度不足定义的长度,会在末尾填充0
- 使用场景:适用于存储加密密钥、哈希值等长度固定的二进制数据的情况
- 使用示例:创建一个表示哈希值的列,使用BINARY(32)数据类型存储哈希值信息
- 参考地址:https://dev.mysql.com/doc/refman/5.7/en/binary-varbinary.html
- 占用存储空间:根据实际存储的数据长度而定,最多65535个字节
- 默认值:空二进制
- 长度范围:0到65535个字节
- 优点:占用的存储空间根据实际数据长度变化,适用于存储长度可变的二进制数据
- 缺点:存储空间相对较大,可能会浪费存储空间
- 使用场景:适用于存储图像、文件等长度可变的二进制数据的情况
- 使用示例:创建一个表示图像的列,使用VARBINARY数据类型存储图像数据
- 参考地址:https://dev.mysql.com/doc/refman/5.7/en/binary-varbinary.html
- BINARY和VARBINARY类型类似于CHAR和VARCHAR,只是它们存储二进制字符串而不是非二进制字符串。也就是说,它们存储字节字符串,而不是字符串。这意味着它们具有二进制字符集和排序规则,并且比较和排序基于值中字节的数值。
- 占用存储空间:根据实际存储的数据长度而定,最多65535个字节
- 默认值:空二进制
- 长度范围:0到65535个字节
- 优点:适用于存储大型二进制对象,如音频、视频文件等
- 缺点:占用的存储空间相对较大,可能会影响性能
- 使用场景:适用于存储大型二进制对象,如多媒体文件、文档等
- 使用示例:创建一个表示音频文件的列,使用BLOB数据类型存储音频文件数据
- 参考地址:https://dev.mysql.com/doc/refman/5.7/en/blob.html
- 占用存储空间:根据实际存储的数据长度而定,最多65535个字节
- 默认值:空字符串
- 长度范围:0到65535个字符
- 优点:适用于存储大量文本数据,无需指定固定长度
- 缺点:占用的存储空间相对较大,可能会影响性能
- 使用场景:适用于存储文章内容、评论等大段文本数据的情况
- 使用示例:创建一个表示文章内容的列,使用TEXT数据类型存储文章内容
- 参考地址:https://dev.mysql.com/doc/refman/5.7/en/blob.html
- BLOB是一个二进制大对象,可以容纳可变数量的数据。BLOB有四种类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。
它们的区别仅在于它们可以保持的值的最大长度。
- TEXT有四种类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。它们对应于四种BLOB类型,具有相同的最大长度和存储要求。
- 占用存储空间:3个字节
- 默认值:'0000-00-00'
- 长度范围:'1000-01-01'到'9999-12-31'
- 优点:存储日期值,占用存储空间较小
- 缺点:不能存储时间信息
- 使用场景:适用于存储生日、注册日期等日期信息的情况
- 使用示例:创建一个表示生日的列,使用DATE数据类型存储生日信息
- 参考地址:https://dev.mysql.com/doc/refman/5.7/en/datetime.html
- 占用存储空间:8个字节
- 默认值:'0000-00-00 00:00:00'
- 长度范围:'1000-01-01 00:00:00'到'9999-12-31 23:59:59'
- 优点:存储日期和时间值,适用于存储完整的日期和时间信息
- 缺点:占用存储空间较大
- 使用场景:适用于存储订单时间、日志记录时间等完整的日期和时间信息的情况
- 使用示例:创建一个表示订单时间的列,使用DATETIME数据类型存储订单时间信息
- 参考地址:https://dev.mysql.com/doc/refman/5.7/en/datetime.html
- 占用存储空间:TIMESTAMP数据类型占用4个字节。
- 默认值:TIMESTAMP数据类型的默认值为当前时间。
- 长度范围:TIMESTAMP数据类型的范围为'1970-01-01 00:00:01'到'2038-01-19 03:14:07'。
- 优点:TIMESTAMP数据类型可以存储日期和时间信息,占用的存储空间较小。
- 缺点:TIMESTAMP数据类型的范围有限,只能存储到2038年。
- 使用场景:TIMESTAMP数据类型适用于存储日期和时间信息,如记录数据的创建时间或更新时间。
- 使用示例:创建一个表示文章发布时间的列,使用TIMESTAMP数据类型存储发布时间信息。
- 参考地址:https://dev.mysql.com/doc/refman/5.7/en/datetime.html
- DATE类型用于有日期部分但没有时间部分的值。MySQL检索并显示“YYYY-MM-DD”格式的DATE值。
支持的范围为“1000-01-01”到“9999-12-31”。
- DATETIME类型用于同时包含日期和时间部分的值。MySQL检索并显示“YYYY-MM-DD hh:MM:ss”格式的DATETIME值。
支持的范围为“1000-01-01 00:00:00”到“9999-12-31 23:59:59”。
- TIMESTAMP数据类型用于同时包含日期和时间两部分的值。
TIMESTAMP的范围为1970-01-01 00:00:01' UTC 到 2038-01-19 03:14:07' UTC。
- 占用存储空间:3个字节
- 默认值:'00:00:00'
- 长度范围:'-838:59:59'到'838:59:59'
- 优点:存储时间值,占用存储空间较小
- 缺点:不能存储日期信息
- 使用场景:适用于存储开店时间、会议时间等时间信息的情况
- 使用示例:创建一个表示开店时间的列,使用TIME数据类型存储开店时间信息
- 参考地址:https://dev.mysql.com/doc/refman/5.7/en/time.html
- 占用存储空间:BIT数据类型占用的存储空间取决于指定的位数,每8位占用1个字节。
- 默认值:BIT数据类型的默认值为NULL。
- 长度范围:BIT数据类型可以指定的位数范围为1到64。
- 优点:BIT数据类型可以有效地存储位标志或布尔值,占用的存储空间较小。
- 缺点:BIT数据类型的位数固定,不适合存储可变长度的二进制数据。
- 使用场景:BIT数据类型适用于存储位标志、开关状态或布尔值等需要占用存储空间较小的情况。
- 使用示例:创建一个表示用户权限的列,使用BIT(8)数据类型存储8个权限位的信息。
- 语法:BIT(M),BIT数据类型用于存储bit值。BIT(M)使得能够存储M-bit。M的取值范围从1到64。
如果将一个值分配给长度小于M位的BIT(M)列,则该值将在左侧填充零。例如,给BIT(6)列赋值b'101'实际上与赋值b'000101'相同。
- 参考地址:https://dev.mysql.com/doc/refman/5.7/en/bit-type.html
注意:BIT数据类型在MySQL中通常用于存储位标志或布尔值,但在不同的数据库中可能存在差异.
- 占用存储空间:ENUM数据类型的存储空间取决于枚举值的数量,每个枚举值占用1或2个字节。
- 默认值:ENUM数据类型的默认值为枚举列表中的第一个值。
- 长度范围:ENUM数据类型可以包含最多65535个枚举值。
- 优点:ENUM数据类型可以限制列只能取特定的值,占用的存储空间较小。
- 缺点:ENUM数据类型的枚举值一旦定义,不容易修改,且不适合存储可变的字符串。
- 使用场景:ENUM数据类型适用于列具有一组固定的取值范围,如性别、状态等。
- 使用示例:创建一个表示用户角色的列,使用ENUM('admin', 'user', 'guest')数据类型存储角色信息。
- 参考地址:https://dev.mysql.com/doc/refman/5.7/en/enum.html
- ENUM是一个字符串对象,其值从允许的值列表中选择,这些值在表创建时在列规范中显式枚举。
- 占用存储空间:SET数据类型的存储空间取决于定义的集合大小,通常占用1、2、3、4或8个字节。
- 默认值:SET数据类型的默认值为空集合。
- 长度范围:SET数据类型可以包含最多64个集合成员。
- 优点:SET数据类型可以存储多个集合成员,占用的存储空间相对较小。
- 缺点:SET数据类型的集合成员一旦定义,不容易修改,且不适合存储可变的字符串。
- 使用场景:SET数据类型适用于列具有多个固定的取值范围,如用户角色、权限等。
- 使用示例:创建一个表示用户权限的列,使用SET('read', 'write', 'delete')数据类型存储权限信息。
- 参考地址:https://dev.mysql.com/doc/refman/5.7/en/set.html
- SET是一个字符串对象,可以有零个或多个值,每个值都必须从创建表时指定的允许值列表中选择。由多个集合成员组成的SET列值由逗号(,)分隔的成员指定。这样做的结果是SET成员值本身不应该包含逗号。
- 占用存储空间:DECIMAL数据类型的存储空间取决于指定的精度和小数位数。根据官方文档,DECIMAL(M, D)占用的存储空间为(M+2)/9 字节,其中M为精度,D为小数位数。
- 默认值:DECIMAL数据类型的默认值为0。
- 长度范围:DECIMAL数据类型可以指定的精度范围为1到65,小数位数范围为0到30。
- 优点:DECIMAL数据类型可以存储精确的小数值,适用于需要确切数值计算的场景。
- 缺点:DECIMAL数据类型占用的存储空间较大,相对于其他浮点数类型,性能可能稍低。
- 使用场景:DECIMAL数据类型适用于需要精确数值计算的场景,如货币金额、税率等。
- 使用示例:创建一个表示商品价格的列,使用DECIMAL(10, 2)数据类型存储价格信息。
- 参考地址:https://dev.mysql.com/doc/refman/5.7/en/fixed-point-types.html
- 占用存储空间:NUMERIC数据类型的存储空间取决于定义的精度和小数位数。
- 默认值:NUMERIC数据类型的默认值为0。
- 长度范围:NUMERIC数据类型可以定义的精度范围为1到65,小数位数范围为0到30。
- 优点:NUMERIC数据类型可以存储精确的数值,适用于需要确切数值计算的场景。
- 缺点:NUMERIC数据类型占用的存储空间较大,相对于其他数值类型,性能可能稍低。
- 使用场景:NUMERIC数据类型适用于需要精确数值计算的场景,如货币金额、税率等。
- 使用示例:创建一个表示订单总额的列,使用NUMERIC(10, 2)数据类型存储总额信息。
- 参考地址:https://dev.mysql.com/doc/refman/5.7/en/fixed-point-types.html
- DECIMAL和NUMERIC类型存储精确的数字数据值。当保持精确性很重要时,例如货币数据时,会使用这些类型。
在MySQL中,NUMERIC被实现为DECIMAL,
Data Type Storage Requirements
- 参考地址:https://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html
Data Type Default Values
- 参考地址:https://dev.mysql.com/doc/refman/5.7/en/data-type-defaults.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。