SELECT * FROM `table` 不会返回 phpMyAdmin 中的所有列

Posted

技术标签:

【中文标题】SELECT * FROM `table` 不会返回 phpMyAdmin 中的所有列【英文标题】:SELECT * FROM `table` does not return all columns in phpMyAdmin 【发布时间】:2013-11-04 07:43:29 【问题描述】:

当我执行SELECT * FROM table 时,返回的行集不包含表中的所有列。它不包含最近添加的列。不过,phpMyAdmin 中的structure 选项卡显示了新列。如果我像SELECT new_column_name FROM table 一样直接查询,也会出现列值。

如果我通过 PHP 或 phpMyAdmin 查询表,则会出现此问题。

很有趣,如果我运行SELECT *, new_column_name FROM tablenew_column_name 的值就会重复。

这种奇怪行为的原因是什么?如何恢复使用* 显示所有列的默认行为?

更新: 我已经刷新了表缓存并重新启动了 mysql 服务器,但没有任何变化。

更新: 存储引擎是 InnoDB

更新: 在添加新列之前,我将列标题拖放到另一个位置以切换列的位置。但是加完列后,我点了restore column order,所以应该没有什么影响……

更新: 如果我通过命令行运行查询,检查返回的内容后,我现在看到问题实际上只出在 phpMyAdmin 上(命令行返回新列等)。仔细检查我在 PHP 中所做的事情表明我明确选择了特定的列。 所以,现在问题只存在于 phpMyAdmin 中。 它可能有什么问题?

【问题讨论】:

也许是一些(mysql)缓存? 我已经刷新了表缓存,但没有任何变化。 @davey:那是我的猜测,* 查询数据库中包含的列。元数据可能尚未更新。 您是在添加列并在同一个连接对象上执行 select * 查询吗? 你的存储引擎是什么?如果您尝试在mysql 命令行客户端中查询您的表怎么办? 【参考方案1】:

刚刚遇到这个问题。

通过将存储引擎从 InnoDB 更改为 MyISAM,然后再次变回 InnoDB 来修复它。

【讨论】:

以上是关于SELECT * FROM `table` 不会返回 phpMyAdmin 中的所有列的主要内容,如果未能解决你的问题,请参考以下文章

oracle 中select /* */ from table语法

为什么要写 select * from table where 1=1

select * from table where something VS select column from table where something

SqlServer对select * from (select *from table) 支持

MySQL 查询不会执行 - Class->Function->Form

select into from 与insert into select from区别