3

我将一个 >2KB 的 SQL 文件粘贴到 mysql CLI,它随机丢失字符,然后在我的 SQL 中报告语法错误。

例如:

(.....)
UPDATE ct_transform_target_summary
SET
ytd_margin_target = jul_margin_target + aug_margin_target + sep_margin_target + oct_margin_target + nov_margin_target + dec_margin_target +
                    jan_margin_target + feb_margin_target + mar_margin_target + apr_margin_target + may_margin_target + jun_margin_target,
ytd_adjustments = jul_margin_adj + aug_margin_adj + sep_margin_adj + oct_margin_adj + nov_margin_adj + dec_margin_adj +
                  jan_margin_adj + feb_margin_adj + mar_margin_adj + apt_margin_adj + may_margin_adj + jun_margin_adj,
ytd_margin = jul_margin + aug_margin + sep_margin + oct_margin + nov_margin + dec_margin +
             jan_margin + feb_margin + mar_margin + apr_margin + may_margin + jun_margin;
(....)

变成:

(....)
->   
->   
->   SET
->     ytd_margin_target = jul_margin_target + aug_margin_target + sep_margin_target + oct_margin_target + nov_margin_target + dec_margin_target +
->                    
->     ytd_adjustments = jul_margin_adj + aug_margin_adj + sep_margin_adj + oct_margin_adj + nov_margin_adj + dec_margin_adj +
->                       jan_margin_adj + feb_ma
->     ytd_margin = jul_margin + aug_margin + sep_margin + oct_margin + nov_margin + dec_margin +
->                  jan_margin + feb_margin + mar_margin + apr_margin + may_

这显然不会发生在短 SQL 代码上,而只会发生在长代码上。这可能是由我的终端(Fedora 17 Gnome 终端)引起的,还是 mysql CLI 的问题?

我以前从未在终端遇到过这样的问题。它只发生在 mysql cli 中。

4

4 回答 4

5

将 SQL 写入文件,即:query.sql,然后使用sourceMySQL CLI 中的命令。

$ vi query.sql
$ mysql -h db.host.tld -u user -p
mysql> use mydatabase
mysql> source query.sql
于 2012-10-25T17:54:56.510 回答
4

粘贴到 MySQL CLI 客户端很棘手,因为它使用 Readline 进行交互式行编辑。Readline 将某些输入解释为控制序列,并且不会将它们逐字传递给 MySQL 客户端。在您的情况下最有可能导致问题的字符是制表符,通常用于 SQL 中的缩进目的,但在 Readline 中用于制表符完成。在查询过程中无意完成的选项卡可能会产生非常意外的结果,并且通常很难确定它引入干扰的确切位置。

于 2012-10-25T20:42:42.543 回答
1

我认为 Sammitch 在这里是正确的,但我相信该解决方案只有在您登录到 mysql 所在的机器时才有效。以下应该可以在任何地方工作。

$ vi query.sql
$ mysql -h db.host.tld -u user -p mydatabase < query.sql

粘贴到 CLI 总是让我紧张!

于 2012-10-25T22:09:54.173 回答
0

当您粘贴到 mysql 服务器上终端中的文件时,会发生这种情况吗?您很可能在通过网络粘贴时遇到了缓冲区问题。但是我会检查粘贴到同一服务器上的文件,如果可行,那么是 mysql cli 导致了一些问题,但我敢打赌这只是网络延迟导致问题。

于 2012-10-24T19:23:59.480 回答