MySQL中常用的数据类型

MySQL支持多种数据类型,主要包括以下几类:

1.数值类型:

**整数类型:**tinyint、smallint、mediumint、int、bigint

区别 :存储大小和范围不同。

tinyint :占用1字节的存储空间,有符号的范围是-128 ~ 127,无符号的范围是 0 ~ 255。

smallint :占用2字节,有符号范围是 -32768 ~ 32767,无符号范围是0 ~ 65535。

mediumint :占用3字节,有符号范围是-8388608 ~ 8388607,无符号范围是0 ~ 16777215。

int :占用4字节,有符号范围是-22147483648 ~ 2147483647,无符号是0 ~ 4294967295。
bigint :占用8字节,有符号的范围是-9223372036854775808 ~ 9223372036854775807, 无符号范围是0 ~ 18446744073709551615。
浮点数类型**:**float和double。 用于存储小数。

**区别:**double类型比float类型有更高的精度。

float是单精度浮点数,占用4字节,精度大约是7位小数。

double是双精度浮点数,占用8字节,精度大约是15位小数。

**定点数类型:**decimal。用于需要精确值的数值,如货币。

举例 : sql语句:column_name DECIMAL(P,D);

P表示有效数字数的精度,范围 1到65.

D表示小数点后的位数,范围0到30。

MySQL要求D小于或等于P

例如:DECIMAL(19,9) 表示列可以存储9位小数的19位数。

拓展:MySQL以二进制格式存储DECIMAL值,DECIMAL(19,9) 对于小数部分具有9位数字,对于整数部分具有10位数字,小数部分需要4个字节,整数部分需要5个字节,所以,DECIMAL(19,9)列总共需要9个字节。】

**2.日期和时间类型:**date、time、year、datetime、timestamp 。用于表示和存储时间值。

date: 表示日期,格式'YYYY-MM-DD',范围是'1000-01-01'到'9999-12-31',占用3字节。

**time:**表示时间,格式为'HH:MM:SS',范围是'-838:59:59'到'838:59:59',占用3字节。

year: 表示年份,格式'YYYY',范围是1901到2155',占用1字节的存储空间。

**datetime:**表示日期和时间,格式为:'YYYY-MM-DD HH:MM:SS',范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59',占用8字节。

timestamp: 表示日期时间,格式为:''YYYY-MM-DD HH:MM:SS',范围是'1970-0-01 00:00:01 UTC' 到 '2038-01-19 03:14:07 UTC',占用4字节。

**timestamp和datetime区别:**timestamp以UTC格式存储,并会自动检索当前时区并进行转换。此外,如果存入的是NULL,timestamp会自动存储当前时间,而datetime会存储NULL。

**3.字符串类型:**char,varchar,binary,varbinary,blob,text,enum和set。

char:存储固定长度非二进制字符串 。若插入的值长度小于列定义的长度,MySQL会用空格填充剩余的空间。当检索这些值时,尾部的空格会被移除。

varchar:存储可变长度非二进制字符串 ,只占用实际需要的空间,加上一个或两个额外字节来记录值的长度。尾部的空格在存储和检索时都会被保留。

binary:类似于char类型,但存储的是二进制字符串 。如果插入的值的长度小于列定义的长度,MySQL会用0x00(零字节)填充剩余的空间。

varbinary:类似于varchar类型,但存储的是二进制字符串 。只占用实际需要的空间,加上一个或两个额外字节来记录值的长度。

blob:用于存储可变长度的大量二进制数据。有四种类型的blob:tinyblob,blob,mediumblob,longblob,存储的最大数据量不同。

**tinyblob:**最大长度为 255 (2^8 - 1) 字节。

**blob:**最大长度为 65,535 (2^16 - 1) 字节,即 64KB。

**mediumblob:**最大长度为 16,777,215 (2^24 - 1) 字节,即 16MB。

**longblob:**最大长度为 4,294,967,295 (2^32 - 1) 字节,即 4GB。

text:用于存储可变长度的大量非二进制字符串数据。有四种类型:tinytext,text,mediumtext,longtext,存储的最大数据量不同。

**tinytext:**最大长度为 255 (2^8 - 1) 字符。

**text:**最大长度为 65,535 (2^16 - 1) 字符,即64KB。

**mediumtext:**最大长度为 16,777,215 (2^24 - 1) 字符,即 16MB。

​​​​​​**longtext:**最大长度为 4,294,967,295 (2^32 - 1) 字符,即 4GB。

enum:存储字符串值的预定义列表中的单个值 。列定义中包含合法字符串值的列表,但enum的值在内部都被存储为数字。

set:类似于enum,但set可以包含零个或多个enum列表中的值。列定义中包含合法字符串值的列表,但set的值在内部被存储为数字。

4.空间数据类型:包括geometry,point,linestring,polygon,multipoint,multilinestring,multipolygon,geometrycollection 。这些类型用于存储空间数据,如地理信息,几何图形等。
**geometry:**是所有空间数据类型的基类,可以存储任何类型的空间数据(point,linestring,polygon等)

**point:**表示一个几何点,通常由经纬度作为坐标。

**linestring:**表示一串点列,若不闭合,则它是simple的;若闭合,则是closed的。

**polygon:**表示一个多边形,可以有内部空洞。

multipoint: 表示多个点的集合。

**multilinestring:**表示多个线段的集合。

**multipolygon:**表示多个多边形的集合。

**geometrycollection:**可以存储任何类型的几何对象的集合。

以上类型都是建立在OpenGIS Geometry Model之上的,其中Geometry是顶级类,它具有所有类型都拥有的属性。

相关推荐
C吴新科13 分钟前
MySQL入门操作详解
mysql
魔道不误砍柴功14 分钟前
Java 中如何巧妙应用 Function 让方法复用性更强
java·开发语言·python
NiNg_1_23414 分钟前
SpringBoot整合SpringSecurity实现密码加密解密、登录认证退出功能
java·spring boot·后端
闲晨17 分钟前
C++ 继承:代码传承的魔法棒,开启奇幻编程之旅
java·c语言·开发语言·c++·经验分享
测开小菜鸟2 小时前
使用python向钉钉群聊发送消息
java·python·钉钉
Ai 编码助手3 小时前
MySQL中distinct与group by之间的性能进行比较
数据库·mysql
P.H. Infinity3 小时前
【RabbitMQ】04-发送者可靠性
java·rabbitmq·java-rabbitmq
生命几十年3万天3 小时前
java的threadlocal为何内存泄漏
java
陈燚_重生之又为程序员3 小时前
基于梧桐数据库的实时数据分析解决方案
数据库·数据挖掘·数据分析
caridle3 小时前
教程:使用 InterBase Express 访问数据库(五):TIBTransaction
java·数据库·express