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 table
,new_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) 支持