在MySQL数据库中最适合使用哪种列类型的布尔值?我使用boolean
,但我的同事使用tinyint(1)
。布尔值与tinyint(1)在MySQL中的布尔值
回答
这些数据类型是同义词。
是的 - http://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html – 2010-09-20 13:27:05
我不会说数据_types_是同义词 - tinyint(1)是相同的布尔,但tinyint和bool不一样。小点,但你的回答绊倒了我第一次阅读它 – 2017-10-06 19:57:52
这并没有回答这个问题。虽然tinyint(1)在功能上与bool完全相同,但操作系统询问最佳使用方法。 @dj_segfault的答案做了一个适当的工作,解释为什么在存储布尔值时,bool应该优于tinyint(1)。 – 2017-11-21 02:05:04
boolean
在MySQL中不是一个独特的数据类型;它只是tinyint
的同义词。 See this page in the MySQL manual。
就我个人而言,我会建议使用tinyint作为首选项,因为布尔值不会做你认为它从名称中做的事情,所以它会导致潜在的误导性代码。但是在实践层面上,这并不重要 - 它们都做同样的事情,所以你不会因为使用任何东西而获得或失去任何东西。
使用枚举其容易和最快
我不会推荐枚举或TINYINT(1),比特(1)只需要1个用于存储布尔值而TINYINT(1)需要8位位。
裁判
我们不能使用枚举,因为我们的数据库也需要支持sqlite – tom 2010-09-20 13:32:53
如果您使用的是InnoDB,那么最终的结果就是使用tinyint的空间。来自[高性能MySQL](http://www.amazon.com/High-Performance-MySQL-Optimization-Replication/dp/1449314287/)(percona球员)“InnoDB存储每个[位]列作为最小的整数类型足以容纳这些位,因此您不需要保存任何存储空间。“唯一的好处就是如果你将多个布尔值存储在BIT(morethan1)列中。因此,如果只有一个布尔字段,那么使用tinyint与InnoDB中的位相同,因为tinyint通常更易于使用,所以更好。 – billmalarky 2013-04-16 18:59:44
,我要在这里采取不同的方法和建议,为您的伙伴开发人员理解你的代码,因为它是编译器/数据库,它只是作为重要的。使用布尔值可以做与使用tinyint相同的功能,但它具有语义上表达您的意图的优点,这是值得的。
如果你使用tinyint,你应该看到的唯一值是0和1并不明显。布尔值总是为真或为假。
我的经验用小巧玲珑连接到MySQL的当是这件事一样。我换了一个非可空位(1)为可空TINYINT(1)通过使用下面的脚本:
ALTER TABLE TableName MODIFY Setting BOOLEAN null;
然后小巧玲珑开始抛出异常。我试图看看脚本前后的区别。并注意到位(1)已变成tinyint(1)。
我然后跑:
ALTER TABLE TableName CHANGE COLUMN Setting Setting BIT(1) NULL DEFAULT NULL;
这解决了这个问题。
虽然这是事实,bool
和tinyint(1)
是功能相同,bool
应该是更好的选择,因为它承载着你想要做什么语义。此外,许多ORM会将bool
转换为您的编程语言的本机布尔类型。
- 1. 布尔另存为tinyint(1)在mysql中
- 2. 与sqlite的布尔的布尔值
- 3. MySQL布尔值 - 翻转值?
- 4. 为什么MySQL将布尔值解释为TINYINT(1)而不是BIT(1)?
- 5. 更新MySQL的布尔(TINYINT)从PHP
- 6. 用0和1(布尔值)的值
- 7. Hibernate的JPA,MySQL和TINYINT(1)布尔代替位或字符
- 8. Java 1.7 CachedRowSet.populate()将MySQL TINYINT(1)转换为布尔值。这可以禁用吗?
- 9. Rails将mysql tinyint(1)视为布尔值 - 但我希望它是一个数字
- 10. 优化MySQL查询与布尔值
- 11. 布尔值
- 12. XSLT布尔值
- 13. 在实体框架中将tinyint映射到布尔值
- 14. sql JOIN与布尔值WHERE
- 15. 问题与setVisible(布尔值)
- 16. 闰年与布尔值
- 17. 3路布尔值与Java
- 18. 流程布尔型,布尔值和布尔型
- 19. 如何更新mysql中的布尔值?
- 20. 从NodeJS中的MYSQL返回布尔值
- 21. 在Log中打印布尔值的值
- 22. 如何根据布尔值在mysql中获取0或1?
- 23. Hibernate中的布尔真值
- 24. java中的布尔赋值
- 25. Select()中的布尔值
- 26. Python中的布尔值
- 27. 三个布尔值保存在一个tinyint
- 28. 获取布尔值
- 29. 更改布尔值
- 30. 翻转布尔值
似乎MySQL透明地将'boolean'视为'tinyint(1)'。所以你可以使用'boolean','true'和'false',MySQL将它们视为'tinyint(1)','1'和'0'。 – ADTC 2016-11-05 07:26:56
另一个案例是字符1与Y&N,这应该是由一些人更快。 – Zon 2017-06-23 05:14:43