【问题标题】:dynamic columns and data type in mysqlmysql中的动态列和数据类型
【发布时间】:2014-09-04 14:47:54
【问题描述】:

我是一个 mysql 新手,被交给了在 mysql 中创建表的任务 - 我们不知道列名或数据类型或数据类型的长度。我们从各种报告引擎中获取数据、xml、文件,并希望将其加载到此表中

有人告诉我,我可以将所有列设为varchar(512)utf-8,并且任何搜索的性能都不会受到影响。

列数可以是 10-200,即使我有一个 UI 允许某人实际设置正确的数据类型和长度,我觉得有人实际配置 200 列到正确的数据类型和长度

由于我没有太多要加载的数据,我无法确认我的经理对varchar(512)utf 8 的建议,因为某些字段仅包含名称和描述,所以我的问题是在这种情况下它是浪费空间当varchar(32) 或类似的东西可以工作时,将其标记为varchar(512)

mysql 5.5+ 上是否有有效的解决方法

【问题讨论】:

  • 如果我查看文档,它指出我可以有 85 列 varchar(255)utf -8dev.mysql.com/doc/refman/5.5/en/column-count-limit.html
  • 事实上,这很好。但更大的问题仍然是,这种方法有用吗?如果你不知道你会得到什么数据/结构,你怎么能计划你的模式呢?在这种情况下,您最好将接收到的数据/XML(或将其转换为 JSON)按原样存储在单个列中。或者您可以查看 NoSQL 解决方案。
  • 它是一个制表符分隔文件,因此将其转换为 json 并存储。如果我必须执行搜索,那么唯一的方法就是序列化该字符串,然后对其执行搜索

标签: mysql


【解决方案1】:

你确定你应该为此使用 MySQL 吗?如果数据大部分是非结构化的,那么您可能需要考虑使用 NoSQL 数据库。

一旦数据进入 MySQL,您将如何处理这些数据?

【讨论】:

  • 显然他们计划根据用户搜索条件进行某种报告。基本上他们想将制表符分隔文件中的数据存储在 mysql 表上并搜索而不是搜索制表符分隔文件
  • 我确实建议使用 nosql 但不是一个可行的选择
  • 在那种情况下,我猜你没有太多选择。听起来他们正试图将非结构化数据强制输入数据库。所以,它不是很“合适”也就不足为奇了。与其他 cmets 一样 - VARCHAR 不会浪费空间。
猜你喜欢
  • 2018-12-16
  • 2016-04-15
  • 2014-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 2021-07-28
  • 1970-01-01
相关资源
最近更新 更多