MySQL 到 MariaDB - 动态列?

MySQL to MariaDB - Dynamic Columns?

我正在尝试将数据从 old_table 传输到 table,其中一些数据位于动态列中以供将来导入

INSERT INTO `table` (`col_1`,`col_2`,etc....   `attributes`)
SELECT `col_1`,`col_2`,etc....     COLUMN_CREATE('name',`col_99` AS UNSIGNED,'name2',`col_100` AS CHAR)
FROM `old_table`

关于动态表的唯一文档基本上就是

COLUMN_CREATE('name',1 AS UNSIGNED) 

这不是一个非常 "dynamic" 的例子...

对其他解决方案开放,但不JSON,更喜欢 MariaDB,因为它本质上是 MySQL,我已经习惯了

编辑:非常感谢您的回答,但为了获得更多信息,我正在尝试使用此处(严重)记录的这种方法:https://mariadb.com/kb/en/dynamic-columns-functions/

编辑 2:我想知道 EAV 是否​​可能是唯一的解决方案,因为我似乎在使用 MariaDB 动态列时碰壁,我在任何地方都找不到更多的文档或指南!

编辑 3:这些动态列还没有运气吗? MariaDB 真的很混乱!

这是你想要的吗?

INSERT INTO `table` (`col_1`, `col_2`, . . . col_99, col_100)
    SELECT `col_1`, `col_2`, . . ., 'name' as col_99, 
           CAST(NULL as char) as col_100  
    FROM `old_table`;

只列出列及其别名;对新列使用常量。

对于动态列 JSON 或 EAV,您可以省略 NULL "columns"。您只需包含非空项。

我建议您放弃动态列;他们只存在于那个地方。与此同时,JSON 正变得越来越被接受。即使您使用的是 "old" 版本的 MariaDB 或 MySQL,您也可以将 JSON 文本放在 TEXT 列中。

请记住,none 类 eav 技术非常干净。

有关问题的更多信息 space:http://mysql.rjweb.org/doc.php/eav

至于"more searchable" -- 你可能需要做出妥协:

  • 常用搜索字段:按INDEXes.
  • 考虑使用一些 text 数据的 FULLTEXT 索引。只需将其全部放入一个文本列中以进行高效搜索。
  • 如果您需要搜索太多不同的字段;使用您的应用程序代码解码 JSON 以完成搜索(在您过滤了 SQL 中的内容之后)。
  • 也就是说,不要指望在 SQL.
  • 中完成所有事情