整数类型
标准 SQL 中支持 INTEGER 和 SMALLINT 这两种类型,MySQL 数据库除了支持这两种类型以外,还扩展支持了 TINYINT、MEDIUMINT 和 BIGINT
整数类型 字节数 无符号数的取值范围 有符号数的取值范围 TINYINT 1 (0,255) (-128,127) SMALLINT 2 (0,65535) (-32768,32767) MEDIUMINT 3 (0,16777215) (-8388608,8388607) INT 4 (0,4294967295) (-2147483648,2147483647) INTEGER 4 (0,4294967295) (-2147483648,2147483647) BIGINT 8 (0,18446744073709551615) (-9223372036854775808,9223372036854775807)
浮点数类型和定点数类型
数据表中用浮点数类型和定点数类型来表示小数,浮点数类型包括单精度浮点数(FLOAT)和双精度浮点数(DOUBLE),定点数类型就是 DECIMAL
类型 字节数 负数的取值范围 非负数的取值范围 FLOAT 4 (-3.402823466E+38,-1.175494351E-38) 0,(1.175494351E-38,3.402 823466E+38) DOUBLE 4 (-1.7976931348623157E+308,-2.2250738585072014E-308) 0,(2.2250738585072014E-308,1.7976931348623157 E+308) DECIMAL(M,D) M+2 取决于 M 和 D 取决于 M 和 D
FLOAT 和 DOUBLE 类型存储数据时存储的是近似值,DECIMAL 存储的是字符串,因此提供了更高的精度。在金融系统中,表示货币金额的时候会优先考虑 DECIMAL 类型;在一般的价格体系,比如购物平台的商品标价,一般用 FLOAT 类型即可
日期和时间类型
每种日期和时间类型都有一个有效范围。如果插入的值超过此范围,系统将报告错误并将零值插入数据库
[En]
Each date and time type has a valid range if the inserted value exceeds this range, the system will report an error and insert a zero value into the database
类型 字节数 取值范围 零值 YEAR 1 1901 ~ 2155 0000 DATE 4 1000-01-01 ~ 9999-12-31 0000:00:00 TIME 3 -838:59:59 ~ 838:59:59 00-00-00 DATETIME 8 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 0000-00-00 00:00:00 TIMESTAMP 4 19700101080001 ~ 2038011911407 00000000000000
字符串类型
CHAR 类型和 VARCHAR 类型都在创建表时指定了最大长度,CHAR 类型的长度是固定的,其长度可以是 0 ~ 255 的任意值。而 VARCHAR 类型的长度是可变的,其最大值可以取 0 ~ 65535 之间的任意值,VARCHAR 类型实际占用的空间为字符串的实际长度加一,这样可以有效节约系统的空间
TEXT 类型是一种特殊的字符串类型,各种 TEXT 类型的区别在于允许的长度和存储空间不同
类型 允许的长度 存储空间 TINYTEXT 0-255 值的长度+2个字节 TEXT 0-65535 值的长度+2个字节 MEDIUMTEXT 0-16772150 值的长度+3个字节 LONGTEXT 0-4294967295 值的长度+4个字节
ENUM 类型又称枚举类型,在创建表时,ENUM 类型的取值范围以列表的形式指定
属性名 ENUM('值1', '值2', ..., '值n')
- 属性名:指字段的名称
- 值n:表示列表中的第 n 个值
ENUM 类型的值只能取列表中的某一个元素,取值列表最多能有 65535 个值。列表中的每个值独有一个顺序排列的编号,MySQL 存入的是这个编号,而不是列表中的值
如果 ENUM 类型加上了 NOT NULL 属性,其默认值为取值列表的第一个元素。如果不加 NOT NULL 属性,ENUM 类型将允许插入 NULL,而且 NULL 为默认值
在创建表时,SET 类型的取值范围就以列表的形式指定了
属性名 SET('值1', '值2', ..., '值n')
二进制类型
BINARY是存储二进制数据的数据类型。
[En]
Binary is the data type that stores binary data.
类型 取值范围 BINARY(M) 字节数为M,允许长度为0~M的定长二进制字符串 VARBINARY (M) 允许长度为0~M的变长二进制字符串,字节数为值的长度加1 BIT(M) M位二进制数据,M最大值为64 TINYBLOB 可变长二进制数据,最多255个字节 BLOB 可变长二进制数据,最多(2^16-1)个字节 MEDIUMBLOB 可变长二进制数据,最多(2^24-1)个字节 LONGBLOB 可变长二进制数据,最多(2^32-1)个字节
BINARY 类型的长度是固定的,不足最长长度的空间有 ‘\0’ 补全
VARBINARY 类型的长度是可变的,在最大范围内使用多少就分配多少
例如,BIT(4) 就是指定数据类型为 BIT 类型,长度为 4,若存储的数据是 0 ~ 15,因为变成二进制后的 15 的值为 1111,则其长度为 4。如果插入的值为 16,其二进制数为 10000,长度为 5 超过最大长度,则插入失败
BLOB 用来保存数据量很大的二进制数据,如图片等。BLOB 类型与 TEXT 类型类似,不同在于 BLOB 类型用于存储二进制数据,根据其二进制编码进行比较和排序,而 TEXT 类型是以文本模式进行比较和排序的
JSON 类型
在 MySQL 中,JSON 值是以字符串形式写入的,MySQL 会对字符串进行解析,如果不符合 JSON 格式,那么写入将失败
名称 描述 json_array() 创建json数组 json_array_append() 数组尾部追加元素 json_array_insert() 在数组的指定位置插入元素 json_extract() / -> / ->> 根据条件提取文档中的数据 json_contains(target,candidate[,path]) 查询文档中是否包含指定的元素 json_contains_path() 查询文档中是否包含指定的路径 json_depth() json文档的深度(元素最大嵌套层数) json_insert() 向json文档插入值 json_keys() 提取json中的键值为json数组 json_length() json文档的长度(元素的个数) json_merge() / json_merge_preserve() 将两个文档合并,保留重复键值 json_merge_patch() 将两个文档合并,替换重复键值 json_object() 创建json对象 json_pretty() 美化json格式 json_quote() / json_unquote() 加上/去掉json文档两边的双引号 json_remove() 删除文档中指定位置的元素 json_replace() 替换文档中指定位置的元素 json_search() 返回所有符合条件的路径集合 json_set() 给文档中指定位置的元素设置新值 json_storage_free() json文档更新操作后的剩余空间 json_storage_size() json文档占用的存储空间 json_table() 将json文档转换为表格 json_type() json文档类型(数组/对象/标量) json_valid() json格式是否合法
Spatial 数据类型
Spatial 数据即空间数据,又称几何数据,表示物体的位置、形态、大小分布等各方面信息
MySQL 包含的空间数据类型有几何体(GEOMETRY)、点(POINT)、线(LINESTRING)和多边形(POLYGON),其中几何体可以存储任何类型的几何数据,而其他三种只能存储对应类型的几何数据
Original: https://www.cnblogs.com/Yee-Q/p/16153180.html
Author: 低吟不作语
Title: MySQL 数据库中的数据类型
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/505480/
转载文章受原作者版权保护。转载请注明原作者出处!