??????? 本文以MySQL8为例,MySQL支持所有SQL标准 种的 数字数据类型,主要支持数值类型、日期和时间类型、字符串(字符和字节)类型、空间类型和?JSON数据类型。
1.? 数值类型
???????? MySQL数值类型包括整型数值(TINYINT、SMALLINT 、?MEDIUMINT、 INT 、BIGINT),定点类型(DECIMAL ),浮点类型(DOUBLE、FLOAT),位值类型(BIT)。
? ?? 1.1 整型类型(精确值)
??????? MySQL支持 SQL 标准整数类型?INTEGER (或INT )和?SMALLINT 。作为标准的扩展,MySQL 还支持整数类型?TINYINT 、MEDIUMINT 和?BIGINT 。??????
数据类型 | 占用空间(字节) | 取值范围(有符号) | 取值范围(无符号) | TINYINT | 1 | -128到127 | 0到255 | SMALLINT | 2 | -32768到32767 | 0到65535 | MEDIUMINT | 3 | -8388608到8388607 | 0到16777215 | INT | 4 | -2147483648到2147483647 | 0到4294967295 | BIGINT | 8 | -9223372036854775808到9223372036854775807 | 0到18446744073709551615 |
??? 注意:开发中常见写法INT(N),不管N是多少,INT占用的都是4个字节;另外N显示的是宽度,不足的时候补0,超过的无视长度,直接显示数值。必须要设置unsigned zerofill才生效。
? ? ?? 1.2? 定点类型(精确值)
????? DECIMAL 和NUMERIC 类型存储精确的数字数据值 ,在MySQL中,NUMERIC被实现为DECIMAL。它是以二进制格式存储值。可以通过指定精度和小数位数来达到自己想要的数值。例如:
DECIMAL(5,2) 其中5指的是精度,2是比例,可以理解取值范围为-999.99到999.99。
数值类型 | 占用空间(字节) | 取值范围 | DECIMAL | 对DECIMAL(M,D) ,如果M>D,为M+2;否则为D+2 | 依赖M和D |
? 1.3 浮点类型(近似值)
????? MySQL中对FLOAT(单精度值)使用四个字节,对DOUBLE(双精度值)使用八个字节。
数据类型 | 占用空间(字节) | 取值范围(有符号) | 取值范围(无符号) | FLOAT | 4 | ?-3.402823466 E+38到-1.175 494 351 E-38? ,0, 1.175494351E到383.402823466351 E+38 | 0,1.175494351E到383.402823466 E+38 | DOUBLE | 8 | -1.7976931348623157 E+308到2.2250738585072014E-308,0,2.2250738585072014E到3081.7976931348623157E+308) | 0,2.2250738585072014E到3081.7976931348623157E+308 |
??? 1.4? 位值类型
????? MySQL中BIT 数据类型用于存储位值,范围从1到64。
2. 日期和时间类型
? ??? MySQL中日期和时间类型有DATE、TIME、DATETIME、TIMESTAMP、YEAR。
数据类型 | 占用空间(字节) | 取值范围 | 格式 | DATE | 3 | 1000-01-01到9999-12-31 | YYYY-MM-DD | TIME | 3 | -838:59:59到838:59:59 | HH:MM:SS | YEAR | 1 | 1901到2155 | YYYY | DATETIME | 8 | 1000-01-01 00:00:00到9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | TIMESTAMP | 4 | 1970-01-01 00:00:00到2038 结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 | YYYYMMDD HHMMSS |
3. 字符串类型
????? MySQL中字符串数据类型有VARCHAR、CHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM、SET。
数据类型 | 占用空间(字节) | 说明 | CHAR | 0到255 | 定长字符串 | VARCHAR | 0到65535 | 变长字符串 | TINYBLOB | 0到255 | 不超过 255 个字符的二进制字符串 | BLOB | 0到65535 | 二进制形式的长文本数据 | TINYTEXT | 0到255 | 短文本字符串 | TEXT | 0到65535 | 长文本数据 | MEDIUMBLOB | 0到16777215 | 二进制形式的中等长度文本数据 | MEDIUMTEXT | 0到16777215 | 中等长度文本数据 | LONGBLOB | 0到4294967295 | 二进制形式的极大文本数据 | LONGTEXT | 0到4294967295 | 极大文本数据 | ENUM | 1或2 | 枚举类型,只能有一个枚举字符串值取决于枚举值的数目 (最大值为65535) | SET | 、2、3、4或8 | 一个设置,字符串对象可以有零个或 多个SET成员,取决于集合 成员的数量(最多64个成员) | BINARY(M) | M | 固定长度二进制字符串 | VARBINARY(M) | M+1 | 可变长度二进制字符串 |
4. 空间类型
????? MySQL 具有对应于 OpenGIS 类的空间数据类型。单值类型GEOMETRY、POINT、LINESTRING、POLYGON,它们的值限制为特定的几何类型。其他集合值包括MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION。
5. JSON数据类型
|