Php 存储多个布尔值的字段

Php 存储多个布尔值的字段,php,mysql,json,Php,Mysql,Json,我的观点如下: 我有一个存储事件的MySQL数据库。这些事件可能发生在一周中的不同日子。你可以这样说: Day | Active Mon | yes Tue | yes Wed | no Thu | no Fri | yes Sat | no Sun | no 现在我不完全确定如何将其保存到数据库中。当然有几种可能性,但我认为我所能想到的一切都有缺点: 将它们存储为Bool类型的7个字段(对于类似的内容,似乎有很多字段) 将它们存储为7位数字(这样我只需要一个整数,但这需要进行一些转换,并且

我的观点如下:
我有一个存储事件的MySQL数据库。这些事件可能发生在一周中的不同日子。你可以这样说:

Day | Active
Mon | yes
Tue | yes
Wed | no
Thu | no
Fri | yes
Sat | no
Sun | no
现在我不完全确定如何将其保存到数据库中。当然有几种可能性,但我认为我所能想到的一切都有缺点:

  • 将它们存储为Bool类型的7个字段(对于类似的内容,似乎有很多字段)
  • 将它们存储为7位数字(这样我只需要一个整数,但这需要进行一些转换,并且缺乏可读性)
在C++中,这些数据可以存储到STD::我打赌MySQL中有一些东西可以用于此。。。请给我指一下:)

附言:

我不知道这是否重要:数据将通过PHP读取,并作为JSON发送到外部世界。

您应该首先使用int思想。在php中,可以将掩码定义为常量,然后使用逐位操作确定设置了哪些标志

因此,与其做类似的事情

myvar & 0x010
它看起来更像是一个常数

myvar & IS_MONDAY

你应该用int这个概念。在php中,可以将掩码定义为常量,然后使用逐位操作确定设置了哪些标志

因此,与其做类似的事情

myvar & 0x010
它看起来更像是一个常数

myvar & IS_MONDAY
可以使用集合类型()。例如,您的表可能是这样的:

+-------------+--------------------+
| event_name  | days               |
+-------------+--------------------+
| some event  | 'monday,friday'    |
+-------------+--------------------+
| another one | 'tuesday'          |
+-------------+--------------------+
从这种表中选择行很容易,而且对于数据库中的任何人来说都是可读的。

您可以使用SET类型()。例如,您的表可能是这样的:

+-------------+--------------------+
| event_name  | days               |
+-------------+--------------------+
| some event  | 'monday,friday'    |
+-------------+--------------------+
| another one | 'tuesday'          |
+-------------+--------------------+

从这种类型的表中选择行很容易,而且数据库中的任何人都可以阅读它。

如果您的条目只是用您提供的输入存储每周事件,为什么不创建一个VARCHAR字段并将其存储为JSON字符串:
{“Mon”:“yes”,“Tue”:“yes”,“Wed”:“no”,“Thu”:“no”,“Fri”:“yes”,“Sat”:“no”,“Sun”:“no”}

如果您的条目只是用您提供的输入存储每周事件,为什么不创建一个VARCHAR字段并将其存储为JSON字符串:
{“Mon”:“yes”,“Tue”:“yes”,“Wed”:“no”,“Thu”:“no”,“Fri”:“yes”,“Sat”:“no”,“Sun”:“no”}

你可以使用
SET
数据类型你可以使用
SET
数据类型,而恒定的想法是个好主意,当SET数据类型已经可以接受位掩码时,为什么要使用mysql
INT
?INT方法具有可移植的优点,而使用SET是不可移植的(如Stormherz所说)。在我看来,缺点是可读性。此外,我还必须自己实现en/解码,这可能是一个错误源。虽然恒定的想法是一个好主意,但当SET数据类型已经可以接受位掩码时,为什么要使用mysql
INT
?INT方法具有可移植性的优点,而使用SET是不可移植的(如Stormherz所说)。在我看来,缺点是可读性。此外,我必须自己实现en/解码,这可能是一个错误源。+1。这是MySQL中最好的方法。集合不能移植到其他数据库。它们还受到不同元素数量的限制。但是,它们似乎非常适合一周中的某几天。我认为这将是一个方向。当编码为JSON时,事件将只包含激活日期的列表。+1。这是MySQL中最好的方法。集合不能移植到其他数据库。它们还受到不同元素数量的限制。但是,它们似乎非常适合一周中的某几天。我认为这将是一个方向。当编码为JSON时,事件只会有一个激活日期的列表。因为这样我可以简单地将所有内容存储在VARCHAR字段中,这不是我决定使用MySQL这样的数据库时想要的。我能想到的一些缺点是可搜索性、性能差、难以增强……因为这样我就可以简单地将所有内容存储在VARCHAR字段中,这不是我决定使用MySQL这样的数据库时想要的。我能想到的一些缺点是可搜索性、性能差、难以增强。。。