MySQL 控制台:Ctrl+C 让我抓狂

Ada*_*tan 28 mysql interface mysql-console

MySQL 控制台中有一些东西让我抓狂。当我点击ctrl+c取消当前正在输入的命令时,终端退出。

在每一个终端我知道(*nix码头,PythonPostgreSQL),ctrl+c取消当前命令和ctrl+d离开终端。

此问题已在 2003 年报告,此后多次出现。

有没有办法:

  • 改变这种行为,或
  • 说服 MySQL 开发团队这真的很烦人?

aku*_*utz 27

至少 5.6.14 版的客户端有--signint-ignore选项可以完全忽略 SIGINT 处理程序。它似乎是在 2004 年 10 月 7 日添加的——所以至少已经有一段时间了。我刚刚测试了它,它确实阻止了 CTRL-C 取消 MySQL 客户端。但是,如果 CTRL-C 也能像在 BASH shell 上那样取消当前的命令行缓冲区,那就太好了——就像 PostgreSQL CLI 所做的那样。我已经对 MySQL 进行了分叉,以了解实现这样的事情会有多困难。当/如果准备好时,我将发布带有 tarball 链接的 Homebrew 公式。

更新 1 曾经有过这样的日子吗?我创建了承诺的补丁,然后我决定创建一个视频来演示它。有效!但是,我无法禁用它!好吧,事实证明 MySQL 实际上在去年将功能融入了核心客户端!是的,这个Q的A是至少要下载MySQL 5.7.3-794-g901d27f的客户端。它具有我们都想要的功能。

示例 在命令行中只需添加 --signt-ignore 标志:

mysql --host=127.0.0.1 --port=8900 --user=root -p --sigint-ignore DBNAME
Run Code Online (Sandbox Code Playgroud)

或者,像我一样在$HOME/.my.cnf%USERPROFILE%/.my.cnf在 Windows 上)为您的用户帐户创建一个 MySQL 配置文件,内容如下:

[mysql]
sigint-ignore=TRUE
Run Code Online (Sandbox Code Playgroud)

这将确保所有mysql执行都忽略烦人的 Ctrl-C 并表现得像一个好的 SQL 客户端。


Der*_*ney 21

虽然ctrl+c行为很烦人,但您仍然可以使用\c取消当前查询。您只需要训练自己在使用 mysql CLI 时,使用\c而不是ctrl+ c

  • 提出这个想法的人是谁?我们要他的头。 (3认同)
  • 您也可以使用 Ctrl+U 删除到行首,使用 Ctrl+W 向后删除一个单词。 (3认同)

Dam*_*dow 11

好消息:#66583终于修复了 MySQL 的 ^C 功能。

5.7.0 更新日志:

以前mysql中的Control+C如果有就中断当前语句,如果没有则退出mysql。现在 Control+C 中断当前语句(如果有),否则取消任何部分输入行,但不退出。


Phi*_*lᵀᴹ 6

要更改行为,请下载 mysql CLI 的源代码并将SIGINT处理程序修改为您认为合适的行为,然后重新编译和安装。

  • 这不是潜在的危险吗?不能保证它适用于未来的版本。**另外**,看起来它可以工作,但是你怎么知道以后在一个完全不相关的地方你不会出现一些奇怪的行为? (2认同)