数据类型是数据库表中列的基本属性,它决定了列中可以存储的数据种类以及如何存储和操作这些数据。选择合适的数据类型对于确保数据存储的准确性和高效性至关重要。MySQL中的数据类型,包括数值类型、日期和时间类型、字符串类型等。
1. 整数
整数类型用于存储整数值,包括TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT。这些类型的取值范围和存储大小不同,可以根据实际需求选择合适的类型。
数据类型 | 存储空间 | 取值范围 |
---|---|---|
tinyint | 1个字节 | 有符号:-2^7 sim (2^7-1) ;无符号:0 sim (2^8-1) |
samllint | 2个字节 | 有符号:-2^{15} sim (2^{15}-1) ;无符号:0 sim (2^{16}-1) |
mediumint | 3个字节 | 有符号:-2^{23} sim (2^{23}-1) ;无符号:0 sim (2^{24}-1) |
int | 4个字节 | 有符号:-2^{31} sim (2^{31}-1) ;无符号:0 sim (2^{32}-1) |
bigint | 8个字节 | 有符号:-2^{63} sim (2^{63}-1) ;无符号:0 sim (2^{64}-1) |
2. 浮点型
数据类型 | 存储空间 | 取值范围 | 说明 |
---|---|---|---|
float | 4个字节 | -3.4E38 ~ 3.4E38 | 单精度浮点数,精确到小数点后7位 |
double | 8个字节 | -1.8E308 ~ 1.8E308 | 双精度浮点数,精确到小数点后15位 |
除了float和double外,MySQL中还有一种浮点类型 -- DECIMAL(十进制),用于存储精确的小数值。与其他浮点数类型相比,DECIMAL类型在存储和计算过程中不会引入浮点误差,因此更适合用于存储货币、金融数据等需要精确值的场景。
DECIMAL类型由两部分组成:精度(precision)和小数位数(scale):
- 精度(precision):表示数值的总位数,包括整数部分和小数部分。取值范围为1到65。
- 小数位数(scale):表示小数部分的位数。取值范围为0到30。
DECIMAL类型的语法如下:
代码语言:sql复制DECIMAL(precision, scale)
例如,要创建一个名为price
的字段,用于存储精确到两位小数的价格数据,可以使用以下语句:
CREATE TABLE product (
id INT PRIMARY KEY,
name VARCHAR(255),
price DECIMAL(10, 2)
);
在这个例子中,DECIMAL(10, 2)
表示数值的总位数为10位,其中小数部分占2位。这意味着该字段可以存储的最大值为99999999.99,最小值为0.01。
当向DECIMAL类型的字段插入数据时,需要注意以下几点:
- 如果插入的数值超出了精度和小数位数的限制,MySQL会报错。
- 如果插入的数值为NULL,则该字段的值为NULL。
- 如果插入的数值为空字符串(''),则该字段的值为0。
在查询DECIMAL类型的字段时,可以使用四舍五入函数(ROUND())来调整小数位数。例如,要将price
字段的值四舍五入到整数,可以使用以下查询:
SELECT id, name, ROUND(price) AS rounded_price FROM product;
总之,DECIMAL类型是一种非常实用的数据类型,适用于存储需要精确值的场景。在使用过程中,需要注意精度和小数位数的设置,以确保数据的准确性。
3. 字符串
- char,定长字符串,最大255字符
- varchar,变成字符串,最多2^{16}-1 字符
- blob,二进制对象,最多2^{16}-1 字节
- longblob,二进制对象,最多2^{32}-1 字节
- text,文本字符串,最多2^{16}-1 字符
- longtext,长文本字符串,最多2^{32}-1 字符
4. 日期和时间类型
数据类型 | 说明 | 格式 |
---|---|---|
DATE | 日期 | YYYY-MM-DD |
TIME | 时间 | HH:MM:SS。 |
DATETIME | 日期和时间 | YYYY-MM-DD HH:MM:SS |
TIMESTAMP | 时间 | 与时区相关 |
YEAR | 年份 | YYYY |
5. 其它类型
数据类型 | 说明 | 取值范围 |
---|---|---|
ENUM | 枚举类型 | 预定义的值集合中的一个值 |
SET | 集合类型 | 预定义的值集合中的零个或多个值 |
JSON | 存储JSON格式的数据 | 最多2^{32}-1 字符 |
声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
blog: mengbin
Github: mengbin92
cnblogs: 恋水无意
腾讯云开发者社区:孟斯特