一. Mysql支持的数据类型
1.整数类型
整数类型 | 字节 | 范围(有符号) | 范围(无符号) | 用途 |
tinyint | 1字节 | (-128,127) | (0,255) | 小整数值 (对应pojo属性数据类型是Boolean) |
smallint | 2字节 | (-32 768,32 767) | (0,65 535) | 大整数值 |
mediumint | 3字节 | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
int或integer | 4字节 | (-2 147 483 648,2 147 483647) | (0,4 294 967 295) | 大整数值 |
bigint 8字节 (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值
INT 类型:在 MySQL 中支持的 5 个主要整数类型是 TINYINT,SMALLINT,MEDIUMINT,INT 和 BIGINT。这些类型在很大程度上是相同的,只有它们存储的值的大小是不相同的。
指定一个字段的类型为 INT(6), 当设置属性 zerofill: 0填充 例:1 就在前面补0为 000001
需要注意的是
,
使用一个宽度指示器不会影响字段的大小和它可以存储的值的范围。
2.小数类型
float(m,d) | 单精度浮点型 | 8位精度(4字节) | m总个数 | d小数位 |
double(m,d) | 双精度浮点型 | 16位精度(8字节) | m总个数 | d小数位 |
decimal(m, d) | 高精度(用于金额) |
M是数字最大位数,范围1-65; D是小数点右侧数字个数范围0-30,但不得超过M。
3.字符串类型
字符串类型 | 字节大小 | 描述及存储需求 |
CHAR | 0-255字节 | 定长字符串 |
VARCHAR | 0-255字节 | 变长字符串 |
TEXT | 0-65535字节 | 长文本数据 |
4.日期类型
类型 | 大小(字节) | 范围 | 格式 | 用途 |
DATE | 4 | 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:5 | YYYY-MM-DD HH:MM:SS |
混合日期和时间
|
5.mysql类型后面的数字长度含义
int(2) :数据类型括号里的数字不管是多少,所占存储空间都是固定的,并不是说只能输入两位数字,而是只显示两位数字
varchar(N):N指的是最大字符数,而不是字节数.
6.NULL和EmptyStrign的区别
NULL哪方面都是NULL,
NULL长度为NULL,
在InnoDB中 NULL比空字串占用更少的空间
EmptyString:是空字符串,
空字串的长度是0
用途:
这两种设计在数据库是否占空间的层面上考虑不会太多,更多的时候还是考虑业务需要会更好
比如某个字段一定要显示,那如果没有只就为“”,前端显示就不要去转换了,也不会引发未考虑到的空指针异常。
而有些字段是可写或可不写,那么为null就表示从来没有填写过,做一些相应的逻辑控制,相当于多了一个状态位。
7.排序规则
utf8_general_ci:不区分大小写
utf8_general_cs:
区分大小写
utf8_bin:字符串每个字符串用二进制数据编译存储。 区分大小写,而且可以存二进制的内容
utf8_general_ci:校对速度快,但准确度稍差。
utf8_unicode_ci:准确度高,但校对速度稍慢。
通常情况下
utf8_general_ci
的准确性就够我们用的了,
所以新建数据 库时一般选用utf8_general_ci就可以了
二.mysql建表注意事项
表设计规范
- 库名、表名、字段名必须使用小写字母,“_”分割。
- 建议使用InnoDB存储引擎。(支持事物)
- 存储精确浮点数必须使用DECIMAL替代FLOAT和DOUBLE。
- 建议使用 UNSIGNED(无符号) 存储非负数值。
- 建议使用INT UNSIGNED存储IPV4。
- 整形定义中不添加长度,比如使用INT,而不是INT(4)。
- 使用短数据类型,比如取值范围为0-80时,使用TINYINT UNSIGNED。
- 尽可能不使用TEXT、BLOB类型。
- VARCHAR(N),N表示的是字符数不是字节数,比如VARCHAR(255),可以最大可存储255个汉字,需要根据实际的宽度来选择N。
- VARCHAR(N),N尽可能小,因为MySQL一个表中所有的VARCHAR字段最大长度是65535个字节,进行排序和创建临时表一类的内存操作时,会使用N的长度申请内存。
- 表字符集选择UTF8。
- 使用VARBINARY存储变长字符串。
- 存储日期使用DATE类型。
- 存储时间(精确到秒)建议使用TIMESTAMP类型,因为TIMESTAMP使用4字节,DATETIME使用8个字节。
- 建议字段定义为NOT NULL。
- 将过大字段拆分到其他表中。
- 禁止在数据库中使用VARBINARY、BLOB存储图片、文件等。