当前位置:网站首页>mysql数据类型
mysql数据类型
2022-06-09 19:28:00 【清风拂来水波不兴】
1.整数类型
| 整数类型 | 大小 | 有符号范围 | 无符号范围 | 描述 |
|---|---|---|---|---|
| TINYINT | 1byte | (-128,127) | (0,255) | 小整数值 |
| SMALLINT | 2byte | (-32768,32767) | (0,65535) | 大整数值 |
| DEDIUMINT | 3byte | (-8388608,8388607) | (0,1677215) | 大整数值 |
| INT或INTEGER | 4byte | (-2147483648,2147483647) | (0,4294967295) | 大整数值 |
| BIGINT | 8byte | (-2^63,2^63-1) | (0,2^64-1) | 极大整数值 |
可选属性:
- M:表示显示宽度,M的取值范围是(0, 255)。该项功能需要配合“ ZEROFILL ”使用,表示用“0”填满宽度,否则指定显示宽度无效。
- UNSIGNED:无符号类型,无符号整数类型的最小取值为0。所以,如果需要在MySQL数据库中保存非负整数值时,可以将整数类型设置为无符号类型。
- ZEROFILL:0填充,(如果某列是ZEROFILL,那么MySQL会自动为当前列添加UNSIGNED属性),如果指 定了ZEROFILL只是表示不够M位时,用0在左边填充,如果超过M位,只要不超过数据存储范围即可。
在 int(M) 中,M 的值跟 int(M) 所占多少存储空间并无任何关系。 int(3)、int(4)、int(8) 在磁盘上都 是占用 4 bytes 的存储空间。也就是说,int(M),必须和UNSIGNED ZEROFILL一起使用才有意义。如果整数值超过M位,就按照实际位数存储。只是无须再用字符0进行填充。
2.浮点类型
| 类型 | 大小 | 有符号范围 | 无符号范围 | 描述 |
|---|---|---|---|---|
| float | 4byte | (-3.402823466E+38, 3.402823466351E+38) | 0和(1.175494351E-38,3.402823466E+38) | 单精度浮点数 |
| double | 8byte | (-1.7976931348623157E+308, 1.7976931348623157E+308) | 0和(2.2250738585072014E-308, 1.7976931348623157E+308) | 双精度浮点数 |
FLOAT和DOUBLE
- MySQL允许使用非标准语法 (其他数据库未必支持): FLOAT(M,D) 或 DOUBLE(M,D) 。这里,M称为精度 ,D称为标度。(M,D)中M=整数位+小数位,D=小数位。
- 说明:浮点类型,也可以加 UNSIGNED ,但是不会改变数据范围
不推荐指定FLOAT和DOUBLE的精度。
浮点数类型不精准。比如,我们设计一个表,有f1这个字段,插入值分别为0.47,0.44,0.19,我们期待的运行结果是:0.47 + 0.44 + 0.19 = 1.1。而使用sum之后查询,结果是 1.0999999999999999。
CREATE TABLE test_double2(
f1 DOUBLE
);
INSERT INTO test_double2
VALUES(0.47),(0.44),(0.19);
SELECT SUM(f1)
FROM test_double2;
#1.0999999999999999
SELECT SUM(f1) = 1.1,1.1 = 1.1
FROM test_double2;
# 0 和 1虽然误差很小,但确实有误差。 你也可以尝试把数据类型改成 FLOAT,然后运行求和查询,得到的是,1.0999999940395355。显然,误差更大了。
浮点数要避免使用“=”来判断两个数是否相等。
3.定点数
| 类型 | 大小(byte) | 范围 | 描述 |
|---|---|---|---|
| decimal | M+2 | 依赖于M(精度)和D(标度)的值 | 定点小数 |
- 使用 decimal(M,D) 的方式表示高精度小数。其中,M被称为精度,D被称为标度。0<=M<=65, 0<=D<=30,D<M。例如,定义decimal(5,2)的类型,表示该列取值范围是-999.99~999.99。
- DECIMAL(M,D)的最大取值范围与DOUBLE类型一样,但是有效的数据范围是由M和D决定的。
- 定点数在MySQL内部是以字符串的形式进行存储,这就决定了它一定是精准的。
当DECIMAL类型不指定精度和标度时,其默认为DECIMAL(10,0)。当数据的精度超出了定点数类型的精度范围时,则MySQL同样会进行四舍五入处理。
浮点数与定点数
- 浮点数相对于定点数的优点是在长度一定的情况下,浮点类型取值范围大,但是不精准,适用 于需要取值范围大,又可以容忍微小误差的科学计算场景
- 定点数类型取值范围相对小,但是精准,没有误差,适合于对精度要求极高的场景
4.位类型:BIT
BIT类型中存储的是二进制值,类似010110。
| 二进制字符串类型 | 长度 | 长度范围 | 占用空间 |
|---|---|---|---|
| BIT(M) | M | 1 <= M <= 64 | 约为(M + 7)/8个字节 |
BIT类型,如果没有指定(M),默认是1位。这个1位,表示只能存1位的二进制值。这里(M)是表示二进制的位数,位数最小值为1,最大值为64。
插入数据时自动转为二进制,并且查询出来默认为16进制
5.日期类型
| 类型 | 描述 | 字节 | 日期格式 | 最小值 | 最大值 |
|---|---|---|---|---|---|
| YEAR | 年 | 1 | YYYY或YY | 1901 | 2155 |
| TIME | 时间 | 3 | HH:MM:SS | -838:59:59 | 838:59:59 |
| DATE | 日期 | 3 | YYYY-MM-DD | 1000-01-01 | 9999-12-03 |
| DATETIME | 日期时间 | 8 | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00 | 9999-12-31 23:59:59 |
| TIMESTAMP | 日期时间 | 4 | YYYY-MM-DD HH:MM:SS | 1970-01-01 00:00:00 UTC | 2038-01-19 03:14:07UTC |
- 在向DATETIME类型的字段插入数据时,同样需要满足一定的格式条件:以 YYYY-MM-DD HH:MM:SS 格式或者 YYYYMMDDHHMMSS 格式的字符串插入
- TIMESTAMP存储数据的时候需要对当前时间所在的时区进行转换,查询数据的时候再将时间转换回当前的时区。因此,使用TIMESTAMP存储的同一个时间值,在不同的时区查询时会显示不同的时间。
TIMESTAMP和DATETIME
- TIMESTAMP存储空间比较小,表示的日期时间范围也比较小
- 底层存储方式不同,TIMESTAMP底层存储的是毫秒值,距离1970-1-1 0:0:0 0毫秒的毫秒值。
- 两个日期比较大小或日期计算时,TIMESTAMP更方便、更快。
- TIMESTAMP和时区有关。TIMESTAMP会根据用户的时区不同,显示不同的结果。而DATETIME则只能 反映出插入时当地的时区,其他时区的人查看数据必然会有误差的。
一般情况使用DATETIME,因为更完整方便,但一般存注册时间、商品发布时间等,不建议使用DATETIME存储,而是使用时间戳 ,因为DATETIME虽然直观,但不便于计算。
6.文本字符串类型
| 类型 | 特点 | 大小 | 占用空间 |
|---|---|---|---|
| CHAR(M) | 固定长度 | 0-255 | M字节 |
| VARCHAR(M) | 可变长度 | 0-65535 | (实际长度 +1 )字节 |
MySQL5.0版本以上,varchar(20):指的是20字符。
char与varchar
1.char(n)和varchar(n),是指定最多n个字符,而char是定长的,所以未达到指定长度的数据也会占用n个字符的存储空间,用空格补齐;varchar是变长数据类型,根据实际的字符来计算空间。
2.char的性能好,因为varchar需要根据内容计算空间,相对较慢。字段的长度是固定的时候,可以使用char。
总结:char适合数据量少,长度比较固定的情况,效率更高。如果是不固定的长度可能会浪费空间。
7.TEXT类型
TEXT用来保存文本类型的字符串,总共包含4种类型。
在向TEXT类型的字段保存和查询数据时,系统自动按照实际长度存储,不需要预先定义长度。这一点和 VARCHAR类型相同。
| 文本字符串类 型 | 特点 | 长度 | 长度范围 | 占用空间 |
|---|---|---|---|---|
| TINYTEXT | 小文本 | L | 0~255 | L + 2 个字节 |
| TEXT | 文本 | L | 0~65535 | L + 2 个字节 |
| MEDIUMTEXT | 中等文本 | L | 0~16777215 | L + 3 个字节 |
| LONGTEXT | 大文本 | L | 0~4294967295(相当于4G) | L + 4 个字节 |
- TEXT文本类型,可以存比较大的文本段,搜索速度稍慢,因此如果不是特别大的内容,建议使用CHAR, VARCHAR来代替。
- 而且text和blob类型的数据删除后容易导致 “空洞”,使得文件碎片比较多,所以频繁使用的表不建议包含TEXT类型字段,建议单独分出去,单独用一个表。
8.ENUM类型
枚举类型,设置字段时需要指明所有枚举的值。从索引1开始标号。
| 枚举类型 | 长度 | 长度范围 | 占用的存储空间 |
|---|---|---|---|
| ENUM | L | 1 <= L <= 65535 | 1或2个字节 |
- 当ENUM类型包含1~255个成员时,需要1个字节的存储空间;
- 当ENUM类型包含256~65535个成员时,需要2个字节的存储空间。
- ENUM类型的成员个数的上限为65535个。
9.SET类型
SET表示一个字符串对象,可以包含0个或多个成员,但成员个数的上限为 64 。设置字段值时,可以取 取值范围内的 0 个或多个值。
当SET类型包含的成员个数不同时,其所占用的存储空间也是不同的,具体如下:
| 成员个数范围(L表示实际成员个数) | 占用空间 |
|---|---|
| 1 <= L <= 8 | 1个字节 |
| 9 <= L <= 16 | 2个字节 |
| 17 <= L <= 24 | 3个字节 |
| 25 <= L <= 32 | 4个字节 |
| 33 <= L <= 64 | 8个字节 |
SET类型在选取成员时,可以一次选择多个成员(用逗号分隔),这一点与ENUM类型不同。
10.二进制字符串类型
MySQL中的二进制字符串类型主要存储一些二进制数据,比如可以存储图片、音频和视频等二进制数据。
MySQL中支持的二进制字符串类型主要包括BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB类型。
BINARY与VARBINARY类型
| 二进制字符串类型 | 特点 | 值的长度 | 占用空间 |
|---|---|---|---|
| BINARY(M) | 固定长度 | 0~255 | M个字节 |
| VARBINARY(M) | 可变长度 | 0~65535 | M+1个字节 |
BINARY和VARBINARY类似于CHAR和VARCHAR,只是它们存储的是二进制字符串。
BLOB类型
BLOB是一个二进制大对象 ,可以容纳可变数量的数据。
| 二进制字符串类型 | 值的长度 | 长度范围 | 占用空间 |
|---|---|---|---|
| TINYBLOB | L | 0~255 | L个字节 |
| BLOB | L | 0~65535 | L+1个字节 |
| MEDIUMBLOB | L | 0~16777215 | L + 3 个字节 |
| LONGBLOB | L | 0~4294967295(相当于4GB) | L + 4 个字节 |
11.JSON类型
在MySQL 5.7中,就已经支持JSON数据类型。在MySQL 8.x版本中,JSON类型提供了可以进行自动验证的 JSON文档和优化的存储结构,使得在MySQL中存储和读取JSON类型的数据更加方便和高效。 创建数据 表,表中包含一个JSON类型的字段 js 。
insert into dept(id,js) values(50,'{"name":"zhangsan", "age":18, "address":{"province":"beijing","city":"beijing"}}');
select js from dept where id = 50;
当需要检索JSON类型的字段中数据的某个具体值时,可以使用“->”和“->>”符号。
select js -> '$.name' as name, js-> '$.age' as age, js->'$.address.city' as city
from dept
边栏推荐
- The number of developers soared by 1.8 million in 24 months, and rust ushered in a highlight moment
- 投资5.5亿元!默克宣布在中国张家港建先进半导体一体化基地
- 一季度全球PC GPU出货量下滑6.2%,疫情创造大量需求至此结束
- SSM驾校管理系统
- Traversal by layer of binary tree
- 快速求完全二叉树的节点个数
- 搭建TypeScript开发环境
- [resource sharing] comprehensive navigation website
- MySQL optimization tutorial: slow query log practice
- 20XX年全國職業院校技能大賽高職組“信息安全管理與評估”賽項任務書
猜你喜欢

Betting on cloud nativity, ampere computing starts the key shot of server chip transformation

The white paper on the panorama of the digital economy, bank wealth management, was released

驱动开发—基础

CL210OpenStack操作的故障排除--诊断OpenStack问题
![[database data recovery] data recovery case of SQLSERVER database file missing for unknown reasons under Windows Server Environment](/img/aa/9942e0c661032dbb9654100dc4d709.png)
[database data recovery] data recovery case of SQLSERVER database file missing for unknown reasons under Windows Server Environment
![[resource sharing] comprehensive navigation website](/img/01/eae58d625ebbf69dcb8766409e2ef0.png)
[resource sharing] comprehensive navigation website
MySQL 8.0.27 installation and configuration tutorial under Windows

2020 "Pan Yun Cup" Cyberspace Security Skills Competition national pull

The problem of the longest valid bracket
MySQL optimization tutorial: slow query log practice
随机推荐
Left hand technology, right hand ecology! Can Intel win this "data" war?
Fast finding the number of nodes in a complete binary tree
Comment on "8 reasons why developers don't like low code and no code"
学习WMX3,运动控制
不只卖电脑的联想,还有什么“新看点”?
二零二二年读书计划
Electron常见问题 60 - 报错:Could not start audio source
Exploration and analysis of hidden information of network security system vulnerabilities in Secondary Vocational Schools
常熟理工小程序sql注入
Using fingerprint for windows two factor identity authentication is both safe and convenient
Pourquoi Google Search ne peut - il pas Pager indéfiniment?
SSM驾校管理系统
VNCTF 2022 InterestingPHP
整形有序数组查找--遍历法与折半法/二分法
5 sous - chaîne palindrome la plus longue (intervalle DP)
The problem of the longest valid bracket
如何生成二维码图片(添加中文标识),并保存到指定的图片静态服务地址,解决二维码汉字不存在得问题。
2022 "network security" competition of secondary vocational group freshmen test of Shandong Zibo Industrial school competition assignment
联发科:市场需求不会消失,未来3年营收年复合增长率将超14%
又是一年高考季,转眼间已经过去12年了