数据类型可以通过 ? data types
查看说明,每种数据类型也可以通过 ? 数据类型
查看。
除了data types 其他可以用?查看的内容可以输入 ? contents
查看。
数据类型 | 作用 |
---|---|
整数 (tinyint, smallint, mediumint, int, bigint) | 都是整数型,表示范围为1,2,3,4,8 B(结尾还可以加 unsigned) |
字符串 (char(位数), varchar(位数), text) | char 长度固定,varchar 长度可变 |
小数 (float, double, decimal(总位数, 小数点后位数)) | 不要用 float, double! |
时间日期 (year, date, time, datetime, timestamp) | date:年月日 time:时间 datetime:年月日时分秒 timestamp:时间戳,现在距离 1970-1-1 的毫秒数 |
Mysql 中的枚举类型 (enum, boolean) |
PS:
-
虽然 text 等类型可以存储很大的数据,不过大数据一般还是不会直接往数据库里存储。如图片,数据库中一般存储其路径、链接。如果非要存储,有 blob (binary large object)。
-
金额等小数一般不会用小数的数据类型存储,而是整数类型/100使用。因为小数形式有误差,比如0.1+0.2=0.30000000004.
-
decimal 这种变长的数据,使用时速度比定长数据慢。而且 decimal 表示范围也有限,不如直接用 bigint。
-
时间戳是有表示范围的,毕竟是个有上限的数,到2038年左右就不好用了。
这里了解到了一个很有趣的[“千年虫”问题](漫画:什么是“千年虫”问题? - 知乎 (zhihu.com))。
回到刚才的话题,因此时间戳也并不推荐使用。
5.7 之后版本的 Mysql 支持 json 属性,以键值对的方式存储,内容相对灵活。因为虽然数据库结构相对严谨,但是很多时候并不是所有属性都能考虑得到(如二手交易平台,不同的售卖品属性差的很多,如自行车和冰箱)加入相对灵活的 json ,一定程度上就能解决这类问题。包括以前 Mysql 没有这个功能的时候,许多公司也会建一个 varchar() 字段来存储 json 字符