我们做的一个项目,把建表的sql语句发给DBA审核,DBA提出了几个意见,其中一条是不建议使用tinyint字段,那个字段type的值可能是1或者2,所以我们用tinyint,以前都是这样用啊。
为什么DBA不推荐使用tinyint呢?
业精于勤,荒于嬉;行成于思,毁于随。
各有各的想法,我比较建议用tinyint,它只占用一个字节,使用enum不灵活,比如定义了1是男,2是女,如果我想显示1是男人,2是女人,就不方便了。
tinyint
enum
而在MYSQL上,是不建议用NULL,NULL是占用四个字符,记录多了,这个是不必要的损耗,查询的时候,where field is null 或者 field is not null,这样的查询,效率也不是很高的,把字段设为default '',这样可以where field = '' or field != '',或者直接不允许为空NOT NULL。
NULL
where field is null
field is not null
default ''
where field = '' or field != ''
NOT NULL
半吊子DBA呗,可能不知道从哪本书上看来的东西,我们公司DBA还不允许字段为NULL呢,更奇葩的都有。
这和当初C语言编程不允许用goto一样,半吊子“专家”
type 用 1,2 本身就不是一种好的设计。时间一久,总是需要翻看代码才知道含义。使用 enum 类型,并给每个类型起个合适的名字会好很多。
type
但是如果这个字段需要关联查询,那么不建议使用,性能会有比较严重的衰减。
说java连mysql的时候,不认识tinyint,只识别0和1
用tinyint挺合理的。别听DBA瞎说。
各有各的想法,我比较建议用
tinyint
,它只占用一个字节,使用enum
不灵活,比如定义了1是男,2是女,如果我想显示1是男人,2是女人,就不方便了。而在MYSQL上,是不建议用
NULL
,NULL
是占用四个字符,记录多了,这个是不必要的损耗,查询的时候,where field is null
或者field is not null
,这样的查询,效率也不是很高的,把字段设为default ''
,这样可以where field = '' or field != ''
,或者直接不允许为空NOT NULL
。半吊子DBA呗,可能不知道从哪本书上看来的东西,我们公司DBA还不允许字段为NULL呢,更奇葩的都有。
这和当初C语言编程不允许用goto一样,半吊子“专家”
type
用 1,2 本身就不是一种好的设计。时间一久,总是需要翻看代码才知道含义。使用enum
类型,并给每个类型起个合适的名字会好很多。但是如果这个字段需要关联查询,那么不建议使用,性能会有比较严重的衰减。
说java连mysql的时候,不认识tinyint,只识别0和1
用tinyint挺合理的。别听DBA瞎说。