MySQL支持的数据类型
这里所谓的数据类型,也就是只在创建表时可以选择的列字段类型,在MySQL中其实可以通过:
总体可分为数值类型、字符/串类型、时间/日期类型、其他类型四种,下面一起来聊聊吧。
1、数值类型
-
tinyint:小整数类型,占位1Bytes,取值范围-128~127。 -
smallint:中整数类型,占位2Bytes,取值范围-32768~32767。 -
mediumint:中大整数类型,占位3Bytes,取值范围-8388608~8388607。 -
int | integer:常用整数类型,占位4Bytes,取值范围-2147483548~2147483647。 -
bigint:超大整数类型,占位8Bytes,取值范围-9223372036854775808~9223372036854775807。 -
float:单精度浮点数类型,占位4Bytes,取值范围-3.4E+38 ~ 3.4E+38。 -
double:双精度浮点数类型,占位8Bytes,取值范围-1.7E-308~1.7E+308。 -
decimal(m,d):小数类型,占位和取值范围都依赖m、d值决定,m是小数点后面的精度,d是小数点前面的标度。 -
bit(m):存储位值,可存储m个比特位,取值范围是1~64。
2、字符串类型
-
char:定长字符串类型,存储空间0~255Bytes。 -
varchar:变长字符串类型,存储空间0~65535Bytes。 -
tinyblob:二进制短字符串类型,存储空间0~255Bytes。 -
tinytext:短文本字符串类型,存储空间0~255Bytes。 -
blob:二进制长字符串类型,存储空间0~65535Bytes。 -
text:长文本字符串类型,存储空间0~65535Bytes。 -
mediumblob:二进制大字符串类型,存储空间0~16777215Bytes。 -
mediumtext:大文本字符串类型,存储空间0~16777215Bytes。 -
longblob:二进制超大字符串类型,存储空间0~4294967295Bytes。 -
longtext:超大文本字符串类型,存储空间0~4294967295Bytes。 -
binary(m):定长字符串类型,存储空间为M个字符。 -
varbinary(m):定长字符串类型,存储空间为M个字符+1个字节。
一般在为列指定数据类型时,都会varchar(255)这样写,其实中间的这个数字限制的并不是字节长度,而是字符数量,比如varchar(255),表示该列最大能存储255个字符。
3、时间/日期类型
-
date:日期类型,占位3Bytes,格式为YYYY-MM-DD。 -
time:时间类型,占位3Bytes,格式为hh:mm:ss。 -
year:年份类型,占位1Bytes,格式为YYYY。 -
datetime:日期时间类型,占位8Bytes,格式为YYYY-MM-DD hh:mm:ss。 -
timestamp:时间戳类型,占位4Bytes,格式为YYYYMMDDhhmmss,最大可精确到微妙。
4、其他类型
-
json:MySQL5.7版本引入的,在此之前只能用字符串类型来存储json数据,需要通过函数辅助使用:-
json_array(...):存储一个json数组的数据。 -
json_array_insert(字段,'$[下标]',"值"):在指定的json数组下标位置上插入数据。 -
json_object(...):存储一个json对象。 -
json_extract(字段,'$.键'):查询键为某个值的所有数据。 -
json_search(....):通过值查询键。 -
json_keys(字段):获取某个字段的所有json键。 -
json_set(字段,'$.键',"值"):更新某个键的json数据。 -
json_replace(...):替换某个json中的数据。 -
json_remove(字段,'$.键'):删除某个json数据。 -
.....:还有一些其他json类型的函数,这里不再说明,一般json类型用的较少。
-
-
enum(选项1,选项2...选项n):新增数据时只能从已有的选项中选择一个并插入。 -
set(选项1,选项2...选项n):新增数据时可以从已有的选项中选择多个并插入。 -
eometry、point、linestring、polygon:空间类型(接触不多)。
稍微解释一下enum、set类型,这两种类型就类似于平时的单选框和多选框,必须从已有的选项中选择,两者的区别在于:enum枚举类型只能选择一个选项,而set集合类型可以选择多个选项(其实用的比较少,多数情况下都是直接在客户端中处理)。
