当前位置: 首页 > 面试题库 >

哪种MySQL数据类型用于存储布尔值

养研
2023-03-14
问题内容

由于MySQL似乎没有任何“布尔”数据类型,因此您“滥用”哪种数据类型在MySQL中存储正确/错误信息?

尤其是在从PHP脚本进行读写的情况下。

随着时间的流逝,我已经使用并看到了几种方法:

  • tinyint,包含值0/1的varchar字段,
  • 包含字符串‘0’/‘1’或’true’/’false’的varchar字段
  • 最后枚举包含两个选项“ true” /“ false”的字段。

以上都不是最佳选择。我倾向于使用tinyint 0/1变体,因为PHP中的自动类型转换使我可以很简单地获得布尔值。

那么,您使用哪种数据类型?是否有为我忽略的布尔值设计的类型?通过使用一种或另一种类型,您是否看到任何优点/缺点?


问题答案:

对于MySQL 5.0.3及更高版本,可以使用BIT。该手册说:

从MySQL 5.0.3开始,BIT数据类型用于存储位字段值。BIT(M)类型可以存储M位的值。M的范围是1到64。

否则,根据MySQL手册,您可以使用bool和boolean,它们是tinyint(1)的别名:

Bool,布尔值:这些类型是TINYINT(1)的同义词。零值被认为是错误的。非零值被认为是正确的。

MySQL还指出:

我们打算在将来的MySQL版本中根据标准SQL实现完整的布尔类型处理。

参考:http :
//dev.mysql.com/doc/refman/5.5/en/numeric-type-
overview.html



 类似资料:
  • 问题内容: 我读过我应该用 钱 ,但是在当今快节奏的世界里,现在也许已经过时了。 我应该使用什么? 问题答案: 不,钱应该还是可以的。

  • 问题内容: Oracle JDBC驱动程序将哪些Java数据类型分配给Oracle SQL数据类型?这是否随类型的大小而变化? 问题答案: 正如其他人已经说过的:驱动程序将所有内容都映射到BigDecimal,即使将其定义为NUMBER(38)(可以将其映射到BigInteger)也是如此。 但是找出驱动程序映射很容易。只需在ResultSet的列上执行getObject(),然后查看驱动程序生成

  • 问题内容: 我打算使用,但是我想知道如果我应该做INT并剥离句点怎么办。哪个会更好,为什么呢? 问题答案: 我想您只对IPv4地址感兴趣,而对IPv6不感兴趣。 我会在列中使用,然后使用和在文本表示形式和int值之间来回转换。

  • 问题内容: 这个问题已经在这里有了答案 : 9年前关闭。 可能重复: 如何在mySQL中存储IP 我想从中获取IP地址和其他一些变量,哪种数据类型是正确的呢? 是吗 问题答案: 由于IPv4地址的长度为4个字节,因此可以使用正好为4个字节的(): 而与它们转换: 对于IPv6地址,您可以改用: 并使用PHP和进行转换:

  • 问题内容: 我需要计算用户在网站上花费的时间。登出时间与登出时间之间的区别是,给我类似“ X先生花了4个小时43分钟”。因此,为了存储the4小时43分钟,我这样声明: 时间NOT NULL 这是有效的还是更好的存储方式?我需要存储在数据库中,因为我还有其他计算需要将其用于+其他用例。 问题答案: 最好将其存储为整数秒数。 该会是干净和简单-即 正如Tristram所指出的,使用该字段存在局限性

  • 我需要存储这样的布尔表达式: 每个变量都是一个布尔表达式,如或的值。问题是存储嵌套的和子句(在它们内部和/或彼此内部),并用包装它们。包裹深度可以很深。 Java SDK是否具有这些表达式的数据结构?