【问题标题】:Storing multiple values in single SQL row在单个 SQL 行中存储多个值
【发布时间】:2015-02-12 09:28:06
【问题描述】:

我正在尝试为我的应用程序建模一个配置表,我想听听您对如何为一个配置值存储多个值的意见。

例如,如何存储可用的语言?如何存储允许的文件扩展名等?

我想在我的表configuration 中有一个字段key 和一个字段value,但我有多种存储值的方法:

  • 序列化 PHP 数组并将其存储在一行中,
  • 存储用逗号分隔的所有值,例如1,4,9,42
  • 有多行具有相同的key 但不同的values。我不明白我怎么能得到这个工作,它会非常不可用......

感谢您的帮助:)

【问题讨论】:

  • 您将在哪里存储数据库配置?您是否考虑过不在数据库中存储应用程序配置?
  • 我打算将我的网站配置存储在我的数据库中,位于名为“配置”的表下。抱歉,如果不清楚。

标签: php mysql serialization configuration


【解决方案1】:

撇开任何关于这是否是一个好主意的讨论,很多人都这样做。一种非常常见的方法是在“配置”表上设置一个“blob”字段,并以 JSON 格式存储您的数据。您将自己序列化和反序列化,但这没什么大不了的。

【讨论】:

    【解决方案2】:

    如果您想将配置存储在数据库中(不推荐,但如果您的应用程序有很多实例,这很有意义)- 让我们分析一下:

    1. 使用相同键存储多行的方法 - 让我们忘记它;)

    2. 存储由, 分隔的许多值 - 如果您需要存储带有 coma 的值(例如:10,000 为一万),这会产生一些问题。然后,您需要对其进行修改以将值存储在用" 封装的 CSV 文件中。

    3. 最好的主意 - 存储序列化的 PHP 值。由于您的应用程序是用 PHP 编写的,这将是最好的 native 方法。使用这种方法很简单:

      $configValue=unserialize(getMyValueFromDb("myKey")); //或更改后保存 $configValue="新值"; saveMyValueToDb(序列化($configValue));

    另外 - PHP serializeunserialize 会注意转义值并正确转换它,因此您不必担心某些逗号分隔的字符串会被 explode 错误地拆分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-10
      • 1970-01-01
      • 1970-01-01
      • 2022-06-18
      • 1970-01-01
      • 1970-01-01
      • 2012-09-04
      相关资源
      最近更新 更多