You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何MySQL输入错误函数databese()时提示‘未选择数据库’?

MySQL拼写错误函数调用的错误提示差异原因分析

问题场景

执行拼写错误的查询语句:

select databese();

未选择数据库时,预期收到函数不存在的错误,却得到:

ERROR 1046 (3D000): No database selected

而选择数据库后,执行同一条错误语句,才得到预期的函数不存在错误:

ERROR 1305 (42000): FUNCTION hoge.databese does not exist

补充测试完整输出:

mysql> select databese();
ERROR 1046 (3D000): No database selected
mysql> select database();
+------------+
| database() |
+------------+
| NULL       |
+------------+
1 row in set (0.00 sec)

mysql> use hoge;
Database changed
mysql> select databese();
ERROR 1305 (42000): FUNCTION hoge.databese does not exist
mysql> select database();
+---------------------------+
| database()                |
+---------------------------+
| hoge                      |
+---------------------------+
1 row in set (0.00 sec)

原因解析

这是MySQL的特定解析行为,和配置无关,核心在于SQL语句的解析优先级:

  • 未选择默认数据库时:MySQL解析databese()时,会先尝试将其识别为「表.列」的引用格式(因为没有默认库,函数调用的解析优先级低于表列引用检查)。由于此时没有选中任何数据库,无法完成表列引用的校验,直接抛出No database selected错误,根本不会进入函数存在性的校验流程。
  • 已选择默认数据库时:MySQL会先检查当前库中是否存在名为databese的自定义函数,确认不存在后,抛出函数不存在的1305错误。
  • 正确的database()是MySQL内置函数,它的解析优先级最高,无论是否选中数据库,都会被直接识别为内置函数,因此未选库时返回NULL,选库后返回当前数据库名称。

内容的提问来源于stack exchange,提问作者arubaito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 04:03:23