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是顶级类,它具有所有类型都拥有的属性。