Mysql

Mysql server 需要在查詢中顯式聲明數據庫

  • September 5, 2017

我正在執行 mysql-client (Ver 14.14 Distrib 5.7.19) 和 mysql-server 版本 5.7.19,使用者 root 來自 Ubuntu 伺服器 16.04.2 LTS 上的 localhost。

我注意到 mysql 不會返回我要詢問的數據,除非我在查詢中明確指定數據庫。我一遍又一遍地複制了下面的行為。

有人可以解釋為什麼會這樣嗎?

use db1;
select database();
   db1

select count(*) from users;
   145

select * from users;
   Empty set, 28416 warnings
select * from users;
   ERROR 2006 (HY000): MySQL server has gone away

每次執行上述查詢時,結果都會發生變化。一個空集,一個Error2006,一個空集,一個Error2006,…

show warnings;
   ERROR 2013 (HY000): Lost connection to MySQL server during query
show warnings;
   Warning 1287 'COM_FIELD_LIST' is deprecated and will be removed in a future release. Please use SHOW COLUMNS FROM statement instead

此警告有 64 行。我只在第一次執行“顯示警告”時收到 Error2013。沒有暫停或延遲。所有後續執行都返回相同的 64 行。

select * from db1.users;

這將毫無問題地返回完整的表(145 行)。

聽起來 5.7.19 跳了槍。

—– 2016-02-05 5.7.11 通用可用性 – 添加或更改功能 – —–

mysql_kill() ( /doc/refman/5.7/en/mysql-kill.html )、mysql_list_fields() ( /doc/refman/5.7/en/mysql-list-fields.html )、mysql_list_processes() ( /doc/ refman/5.7/en/mysql-list-processes.html ) 和 mysql_refresh() ( /doc/refman/5.7/en/mysql-refresh.html ) C API 函式已被棄用,並將在 MySQL 的未來版本中刪除. 對應的 COM_PROCESS_KILL、COM_FIELD_LIST、COM_PROCESS_INFO 和 COM_REFRESH 客戶端/伺服器協議命令也是如此。相反,使用 mysql_query() ( /doc/refman/5.7/en/mysql-query.html ) 執行 KILL ( /doc/refman/5.7/en/kill.html ),顯示列 ( /doc/refman/5.7 /en/show-columns.html )、SHOW PROCESSLIST ( /doc/refman/5.7/en/show-processlist.html ) 或 FLUSH ( /doc/refman/5.7/en/flush.html ) 語句。

建議您使用 bugs.mysql.com 發布錯誤。

引用自:https://dba.stackexchange.com/questions/185036