这里所谓的数据类型,也就是只在创建表时可以选择的列字段类型,在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
集合类型可以选择多个选项(其实用的比较少,多数情况下都是直接在客户端中处理)。