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