首页 > 解决方案 > MySQL 选择语句不适用于`*`

问题描述

尝试使用以下语句从我的 SQL 表中加载数据

select `*` from `table_name`

不幸的是,它在 MySQL 5.6.33版本中引发错误,而另一方面它在5.7.25版本中运行良好。

我很困惑是配置问题还是版本更改,因为我无法找到有关上述内容的清晰文档。

另外,编写选择语句的首选方式是什么?我应该去还是不去

标签: phpmysql

解决方案


简短的回答:没有必要把你*的记号包装起来——它实际上可能会产生误导,或者这样做会导致错误。

从 MySQL 手册中,

标识符引号字符是反引号 (`)

这基本上意味着用反引号引用的任何内容都将被解释为列或表。

*是运算符 - 不是表或列。这个操作员基本上说给我这个表的所有列。当你这样做...

`*`

..您基本上是在要求 MySQL 获取具有确切名称的列的值,而不是使用将为您提供所有列*的实际运算符。*

SELECT * FROM `myTable`   -- Selects all columns
SELECT `*` FROM `myTable` -- Tries to select the column with the actual name of *

显然,有一个名为的列*将是一个非常糟糕的主意。


这很有趣,因为版本 5.6 和 5.7 之间发生了一些变化(请参阅MySQL 5.6MySQL 5.7的小提琴),这允许以下表达式有效,尽管我无法在任何地方找到它的文档。

SELECT `*` FROM `myTable`


推荐阅读