MySQL中用于存储布尔值的数据类型是什么?

12

可能重复:
哪种MySQL数据类型用于存储布尔值?

我是一名.NET程序员,第一次使用MySQL数据库。

我想要存储布尔值,MySQL有BIT,但是.NET将这个数据类型转换为UINT64

还有另一种数据类型TINYINT(1),它的.NET等效类型是System.Boolean,可以满足我的需求。

但是,为什么我会使用TINYINT(1)(它可以存储像123、22这样的值),而不是BIT,而且TINYINT(1)也会占用更多的空间(我猜)? 使用它可能是合法的,但我认为这不是道德的。

有人能帮忙解答我的疑问吗?


“.NET 转换”是什么意思?你是如何将数据库中的值转换为 .NET 类型的?如果你是手动转换,为什么不使用:Convert.ToBoolean(reader["columnName"])。这应该可以将 BIT 值转换为布尔型而没有问题。 - DavidWainwright
如果您正在使用DataReader并进行上述转换,则可以正常工作。 但是,如果您使用的是DataTable并尝试进行转换,则无法正常工作。 - Deviprasad Das
3个回答

8
MySQL有BOOL和BOOLEAN类型,但它们都是TINYINT(1)的同义词。值为零被认为是假的,非零值被认为是真的。我猜MySQL的某个人考虑过这个问题,并决定TINYINT(1)是首选的方式。我一直都是这样使用的。
在这个类似的问题中还有更多信息:MySQL中BIT和TINYINT之间的区别是什么?

3
BIT不是你想象中的那样工作,它通常用于存储位域(bitfields),而BIT(M)大约需要(M+7)/8(整数运算)字节的存储空间。使用BIT(1)将占用一个完整的字节,与TINYINT相同,所以不用担心。
如果您有兴趣,各种类型的存储要求在这里

1

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