布尔值与tinyint(1)在MySQL中的布尔值

什么列types是最好在MySQL数据库中使用布尔值? 我使用boolean但我的同事使用tinyint(1)

这些数据types是同义词。

我将在这里采取一种不同的方法,并build议对于您的开发人员来说,理解您的代码与编译器/数据库一样重要。 使用布尔值可能与使用tinyint做同样的事情,但它具有语义上传达你的意图的好处,这是值得的。

如果你使用tinyint,你应该看到的唯一值是0和1,这并不明显。一个布尔值总是为true或false。

boolean在MySQL中不是一个独特的数据types; 它只是tinyint的同义词。 请参阅MySQL手册中的这个页面 。

就个人而言,我会build议使用tinyint作为首选项,因为布尔值不会做你认为它的名字,所以它会导致潜在的误导性代码。 但是,在实际的层面上,这并不重要 – 它们都是一样的,所以你也不会因为使用任何东西而获得或损失任何东西。

使用枚举它的容易和最快

我不推荐枚举或tinyint(1)作为位(1)只需要1位用于存储布尔值,而tinyint(1)需要8位。

REF

TINYINT与ENUM(0,1)的布尔值在MySQL中

我使用Dapper连接到MySQL的经验是, 它确实很重要 。 我通过使用下面的脚本将不可空的位(1)更改为可空tinyint(1):

 ALTER TABLE TableName MODIFY Setting BOOLEAN null; 

然后,Dapper开始抛出exception。 我试图看看脚本前后的差异。 注意到(1)已经变成了tinyint(1)。

然后我跑了:

 ALTER TABLE TableName CHANGE COLUMN Setting Setting BIT(1) NULL DEFAULT NULL; 

解决了这个问题