对于布尔用途列,哪一列更好:可空的char(0)或tinyint(1)。
我知道bool是tinyint(1)的别名,但在O‘’reilly出版的“高性能MySQL”一书中说:
“如果要将真/假值存储在单个存储空间中,另一个选项是创建一个可为空的CHAR(0)列。该列能够存储没有值(NULL)或零长度值(空字符串)的情况。”
哪一个的尺寸、性能、索引还是.
更新:我发现这个链接对这个问题很有用:Innodb表的有效布尔值存储
发布于 2013-07-02 14:25:10
您应该记住,即使作为复合索引的一部分,也不可能对CHAR(0)列进行索引。
就大小而言,没有比NULLable CHAR(0)更好的了;但是您有多少这样的?与表中的其他数据类型相比?通常情况下,与总体数据类型和大小相比,这是不可忽视的。
最清晰的是未签名的BOOL/TINYINT。最明显的是,人们期望什么价值。
否则,请在我的帖子中考虑许多备选方案,并在评论中看到好的想法:选择MySQL布尔数据类型
发布于 2013-07-02 13:12:33
我认为您应该使用TINYINT( 1 ),因为对于整数值,可以将值降到0和1。使用TINYINT,我们只支付1字节的存储。与CHAR( 1 )一样,我们不能阻止任何人使用除0和1以外的其他值,但这并不重要,如果我们愿意接受0计算为False,而所有其他值都为True的话。使用TINYINT(1),布尔表达式可以很好地处理列值。
我觉得检索和排序整数字段比字符字段更快,而且对于on/off标志显示1s和0也很常见。
https://dba.stackexchange.com/questions/45580
复制相似问题