当 UNION 两个视图时,MySQL 抛出太多列错误

问题描述 投票:0回答:1

好吧,我正在开发一个客户项目,他们有两个视图(视图 A 和视图 B),每个视图有 1029 列。现在他们希望我为视图 A 和视图 B 创建另一个主视图(因为视图相同,因此可以执行合并)。现在,当您分别查询视图 A(1029 列)和视图 B(1029 列)时,它加载得很好。

但是,当我对视图 A + 视图 B 进行并集时,它不起作用并给出错误:列太多。

由于它是一个联合,所以组合后的主视图仍然只有 1029 列,但我仍然无法理解的是,为什么当我单独对视图 A 或视图 B 执行选择命令时它会起作用,但当我执行 UNION 时,那么它给出了太多列错误?

注意:主创建视图查询已成功运行,我收到的错误是在创建视图后运行任何选择命令时出现的错误。

查询:

UNION ALL

CREATE OR REPLACE VIEW ViewX AS
SELECT * FROM ViewA
UNION ALL
SELECT * FROM ViewB;

然后我得到了这个

SELECT ID FROM ViewX LIMIT 1

额外:

连接表创建Error 1117: Too many columns的逻辑如下:

ViewA

	
mysql innodb rdbms
1个回答
0
投票

每个表有 4096 列的硬性限制,但对于给定表,有效最大值可能会更少。确切的限制取决于几个相互作用的因素。

每个表(无论存储引擎如何)的最大行大小为 65,535 字节。存储引擎可能会对此限制施加额外的限制,从而减少有效的最大行大小。

最大行大小限制了列的数量(以及可能的大小),因为所有列的总长度不能超过此大小。

...

各个存储引擎可能会施加额外的限制来限制表列数。例子:

InnoDB 允许最多 1000 列。

© www.soinside.com 2019 - 2024. All rights reserved.