timestamp:用4个字节来保存数据,它的取值范围为1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07。此外,它还跟时区有关。
datetime:用8个字节来保存数据,它的取值范围为1000-01-01 00:00:00 ~ 9999-12-31 23:59:59。它跟时区无关。
优先推荐使用datetime类型保存日期和时间,可以保存的时间范围更大一些。
温馨提醒一下,在给时间字段设置默认值是,建议不要设置成:0000-00-00 00:00:00,不然查询表时可能会因为转换不了,而直接报错。
11.金额字段
mysql中有多个字段可以表示浮点数:float、double、decimal等。
而float和double可能会丢失精度,因此推荐大家使用decimal类型保存金额。
一般我们是这样定义浮点数的:decimal(m,n)。
其中n是指小数的长度,而m是指整数加小数的总长度。
假如我们定义的金额类型是这样的:decimal(10,2),则表示整数长度是8位,并且保留2位小数。
12.唯一索引
唯一索引在我们实际工作中,使用频率相当高。
你可以给单个字段,加唯一索引,比如:组织机构code。
也可以给多个字段,加一个联合的唯一索引,比如:分类编号、单位、规格等。
单个的唯一索引还好,但如果是联合的唯一索引,字段值出现null时,则唯一性约束可能会失效。
创建唯一索引时,相关字段一定不能包含null值,否则唯一性会失效。
13.字符集
mysql中支持的字符集有很多,常用的有:latin1、utf-8、utf8mb4、GBK等。
这4种字符集情况如下:
latin1容易出现乱码问题,在实际项目中使用比较少。
而GBK支持中文,但不支持国际通用字符,在实际项目中使用也不多。
从目前来看,mysql的字符集使用最多的还是:utf-8和utf8mb4。
其中utf-8占用3个字节,比utf8mb4的4个字节,占用更小的存储空间。
但utf-8有个问题:即无法存储emoji表情,因为emoji表情一般需要4个字节。
由此,使用utf-8字符集,保存emoji表情时,数据库会直接报错。
所以,建议在建表时字符集设置成:utf8mb4,会省去很多不必要的麻烦。
14. 排序规则
不知道,你关注过没,在mysql中创建表时,有个COLLATE参数可以设置。
例如:
CREATE TABLE `order` ( `id` bigint NOT NULL AUTO_INCREMENT, `code` varchar(20) COLLATE utf8mb4_bin NOT NULL, `name` varchar(30) COLLATE utf8mb4_bin NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `un_code` (`code`), KEY `un_code_name` (`code`,`name`) USING BTREE, KEY `idx_name` (`name`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_ bin
它是用来设置排序规则的。
字符排序规则跟字符集有关,比如:字符集如果是utf8mb4,则字符排序规则也是以:utf8mb4_开头的,常用的有:utf8mb4_general_ci、utf8mb4_bin等。
其中utf8mb4_general_ci排序规则,对字母的大小写不敏感。说得更直白一点,就是不区分大小写。
而utf8mb4_bin排序规则,对字符大小写敏感,也就是区分大小写。
说实话,这一点还是非常重要的。
假如order表中现在有一条记录,name的值是大写的YOYO,但我们用小写的yoyo去查,例如:
select * from order where name='yoyo';
如果字符排序规则是utf8mb4_general_ci,则可以查出大写的YOYO的那条数据。
如果字符排序规则是utf8mb4_bin,则查不出来。
由此,字符排序规则一定要根据实际的业务场景选择,否则容易出现问题。
15.大字段
我们在创建表时,对一些特殊字段,要额外关注,比如:大字段,即占用较多存储空间的字段。
比如:用户的评论,这就属于一个大字段,但这个字段可长可短。
但一般会对评论的总长度做限制,比如:最多允许输入500个字符。
如果直接定义成text类型,可能会浪费存储空间,所以建议将这类字段定义成varchar类型的存储效率更高。
当然,我还见过更大的字段,即该字段直接保存合同数据。
一个合同可能会占几Mb。
在mysql中保存这种数据,从系统设计的角度来说,本身就不太合理。
像合同这种非常大的数据,可以保存到mongodb中,然后在mysql的业务表中,保存mongodb表的id。
本文地址:百科问答频道 https://www.neebe.cn/wenda/916642_3.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!