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.
中完成所有事情
我正在尝试将数据从 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. 中完成所有事情