12

我有一个定义一些 SQL 代码的应用程序:

mySql = "SELECT     
            sq.question, 
            qs.title, 
            sq.id as question_id, 
            sq.type,
            qs.id as option_id, 
            sri.title as rankTitle,
            sri.id as rankId,
            sfi.title as formTitle,
            sfi.id as formId,
            sq.sub_type,
            sq.sort_order
FROM        survey_questions as sq 
LEFT JOIN   question_suboptions as qs
ON          sq.id = qs.question_id 
LEFT JOIN   survey_rankingitems as sri
ON          sq.id = sri.question_id
LEFT JOIN   survey_formitems as sfi
ON          sq.id = sfi.question_id
WHERE       sq.survey_id = #{@surveyId}
ORDER BY    sq.sort_order"

我想将此代码(双引号之间的所有内容)粘贴到 MySQL 命令行中,更改一个参数并执行它,但我遇到了一个问题,MySQL 上方的每一行都会显示:

显示所有 1450 种可能性?(是或否)

然后是 1450 个不同的可用命令。如果我删除所有换行符和制表符,那么我可以粘贴进去,但这既费时又痛苦。有没有一种方法可以简单地粘贴上面的代码,对其进行编辑,然后将其作为一个单元执行?

4

4 回答 4

22

这是用户每次按键时的默认mysql (CLI) 行为( mysql使用底层的readlineEditLine库(不在 Windows 上))。Tab

默认情况下,当用户请求use数据库时, mysql会读取表和字段定义。然后,按Tab键使mysql方便地使用已知的表和字段完成当前输入。

但是,将一些包含 TAB 字符(或)的文本粘贴到mysql中会触发相同的行为 - 即使实际上没有从键盘按下任何键。这可能很烦人。\t0x09Tab


但是,给mysql的两个选项可以防止这种行为。我最喜欢的是--disable-auto-rehash。另一个是--quiet-q

  • --disable-auto-rehash防止数据库、表和列名完成(不是从数据库中读取的,rehash如果以后需要完成,请使用该命令)。但是,命令历史记录被保留(通过↑</kbd> and ↓</kbd> keys for instance). Which is convenient.

  • --quick或者-q这使得mysql不使用历史文件并且没有完成(不读取数据库定义)。

在 Linux 上,可以添加一个别名.bashrc--disable-auto-rehash自动使用

alias mysql2='mysql --disable-auto-rehash'
于 2014-12-16T10:12:29.337 回答
4

您需要删除换行符和制表符。双制表符导致它显示Display all 1450 possibilities? (y or n)和换行符导致它提前执行。

如果是 PHP,请编写一个小脚本为您剥离它:

echo (preg_replace("/\s+/", " ", $string));

或其他语言的类似内容。

于 2013-03-12T15:14:07.427 回答
4

也许您可以将语句保存到文本文件myTest.sql中,然后使用 MySQL 命令source myTest.sql运行它?然后,您可以调整文件中的 SQL,保存更改并再次运行它。

于 2013-03-12T15:18:08.603 回答
1

Breaking not so bad's answer很好地解释了这个问题的原因。

从问题:

如果我删除所有换行符和制表符,那么我可以粘贴进去,但这既费时又痛苦。

就我而言,我只是用空格替换了选项卡,并且能够很好地粘贴查询。MySQL 控制台似乎不关心换行符,只关心选项卡。

作为防止这种情况的一种方法,大多数编辑器都有一个设置,当您按下Tab键时会插入制表符而不是空格。我通常以这种方式配置我的 IDE,但在这种情况下,它是我从 MySQL 工作台复制的查询。方便的是,它还有一个使用空格而不是制表符的设置:

编辑>首选项>常规编辑器> 检查Tab 键插入空格而不是制表符>确定

于 2021-06-28T15:43:56.983 回答