BOOL和tinyint(1)…unsigned是什么意思?

9

我看过一些资料,说mysql中的bool类型是tinyint(1)的别名,因此我应该使用tinyint。

我的问题如下: 我需要声明它为无符号类型吗?也就是说,这是必须的吗?

purchased tinyint(1) unsigned not null DEFAULT 0,

or

purchased tinyint(1) not null DEFAULT 0,

4
你使用BOOL有什么问题吗? - Kerrek SB
2
因此我应该使用tinyint - 为什么要这样做?BOOL非常好,而且(在我看来)更能表达你的意图。TINYINT(1)可能意味着“从0到9的任何值”;BOOL具体表示“0或1”(尽管我想你可能会误传你的意图:-))。 - Ted Hopp
3个回答

11

没必要,直接保留它的签名。实际上,无论如何都不重要- 0和1都在TINYINT的有效值范围内,而其签名无关紧要。

但是,认真考虑一下,最好将其声明为BOOL,这样非常清楚地表示它是一个真或假的值。


1
我之前不知道在MySQL中可以使用布尔类型,我以为MySQL不支持布尔类型...学习永远不嫌晚... - Marco
4
BOOLTINYINT(1) 的同义词。 - Michael
1
有些版本可能不支持BOOL,使用tinyint也是一个好选择,因为如果您需要在不同的SQL中使用查询,转换会更容易! - JDuarteDJ

3

如果您将其用于存储布尔值,特别是在这种情况下,无需声明为无符号。


1
截至今天(2022年11月09日),有两个答案回答这个问题,指出无需定义为无符号。但我的理解是不仅仅是“不必要”,应该避免。MySQL和MariaDB文档指出BOOLEAN是TINYINT(1)的同义词,而不是TINYINT(1)UNSIGNED的同义词。似乎客户端库和ORM广泛使用了这一事实。TINYINT(1)被读取为布尔值,而TINYINT(1)UNSIGNED被读取为数字。

具体例子: https://mysqlconnector.net/api/mysqlconnector/mysqlconnectionstringbuilder/treattinyasboolean/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接