php - MySQL 选择语句不适用于`*`
问题描述
尝试使用以下语句从我的 SQL 表中加载数据
select `*` from `table_name`
不幸的是,它在 MySQL 5.6.33版本中引发错误,而另一方面它在5.7.25版本中运行良好。
我很困惑是配置问题还是版本更改,因为我无法找到有关上述内容的清晰文档。
另外,编写选择语句的首选方式是什么?我应该去还是不去。
解决方案
简短的回答:没有必要把你*
的记号包装起来——它实际上可能会产生误导,或者这样做会导致错误。
从 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.6和MySQL 5.7的小提琴),这允许以下表达式有效,尽管我无法在任何地方找到它的文档。
SELECT `*` FROM `myTable`
推荐阅读
- django - 部署时网站图标不显示
- google-analytics - 如何使用 Barba.js 实现谷歌分析
- python - Discord.py 无法定义频道 [已修复]
- database - 我需要在 Postgresql 中增加 max_connections 吗?
- intellij-idea - IntelliJ IDEA for Mac:缩写(文本直接替换)
- azure - start_logging 和 run.get_context 之间的区别
- reactjs - × FirebaseError: Function CollectionReference.doc() 要求其第一个参数为非空字符串类型,但它是:自定义 Object 对象
- kotlin - Kotlin 中 JVM 上数字表示的意外行为
- windows - 如果我想留出要分配给服务器的地址范围
- reactjs - 内容安全策略不允许 img-src 的外部站点