• ベストアンサー

mysqlコマンドでSQL文が実行できません

いつもお世話になっております。 いつも調べてはいるのですが、わからず困っております。 mysqlコマンドで-eを付けて、次のようにコマンドプロンプトでクエリを実行します。 mysql db1 -u root -p**** -e 'SELECT * FROM tb1' すると失敗するのですが、シングルクォーテーションをダブルクォーテーションにすると実行できます。 mysql db1 -u root -p**** -e "SELECT * FROM tb1" コマンドプロンプトでは" "にしなければいけないのでしょうか。 どなたかヒントでもけっこうですので、お教えいただけないでしょうか。 どうか、よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

MySQL 4.1の日本語版マニュアルには、この辺の記述が見当たりませんでした。MySQL 5.1の日本語版マニュアルには、この辺について記述がありました。 http://dev.mysql.com/doc/refman/5.1/ja/mysql-command-options.html ↓(リンク先) http://dev.mysql.com/doc/refman/5.1/ja/command-line-options.html 「ステートメントはシングル、またはダブルの引用符で囲まれている必要があります。もしこの引用符内の値を使用したい場合には、ステートメントにダブルの引用符を使用し、シングルの引用符をステートメント内の値のうちのいづれかに使用します。」 とあり、これを見ると、「シングルクォーテーションはだめ」とは読み取れません。ただし、SQL中に文字定数を指定する場合は、「ステートメント全体はダブルクォーテーションで囲み、文字定数はシングルクォーテーションで囲む」と読めます。 -e "select * from t1 where c1 like 'abc%'" といった使い方ですね。 ちなみに、MySQL 5.1の英語版では、「The statements must be enclosed by quotation marks. 」としか記述がありません。

kisoyasa
質問者

お礼

chukenkenkouさん、恐縮です。 本当にいつもいつも、申し訳ありません。 やはりシングルでも、MySQL側は問題ある、ということではないのですよね。 ありがとうございます。感謝しております。

その他の回答 (2)

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.3

コマンドプロンプトってwindowsのですよね? windowsのcommand.comが、ブランクを含む文字列をひとつながりの引数として解釈するために、ダブルクォートが必要です。 MySQLは、そこで解釈された後の引数を受け取るので、statment外側のクォートが何であったかは関知しません。 そして、statment内の文字列指定に、シングルが使えるので、コマンドライン入力でも内部のクォートをいちいちエスケープしなくても簡単に外側と区別して記述できると言うことです。

kisoyasa
質問者

お礼

ご回答ありがとうございます。 「ブランクを含む文字列をひとつながりの引数として解釈」する ということなのですね。 ありがとうございます。

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

シングルクォーテーションではうまくいかなくて ダブルクォーテーションではうまくいく、ということは、 コマンドプロンプトにおいては ダブルクォーテーションを使わなければならない、 ということではないでしょうか。 MySQLでは、そういうことになっているのだと思います。

kisoyasa
質問者

お礼

ご回答、ありがとうございます。 お礼が遅れて申し訳ありませんでした。 いろいろな本をみても、たしかにコマンドプロンプトではダブルみたいですね。 そういうことなのかもしれませんね。 ありがとうございました。

関連するQ&A