- ベストアンサー
mysqlコマンドでSQL文が実行できません
いつもお世話になっております。 いつも調べてはいるのですが、わからず困っております。 mysqlコマンドで-eを付けて、次のようにコマンドプロンプトでクエリを実行します。 mysql db1 -u root -p**** -e 'SELECT * FROM tb1' すると失敗するのですが、シングルクォーテーションをダブルクォーテーションにすると実行できます。 mysql db1 -u root -p**** -e "SELECT * FROM tb1" コマンドプロンプトでは" "にしなければいけないのでしょうか。 どなたかヒントでもけっこうですので、お教えいただけないでしょうか。 どうか、よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
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. 」としか記述がありません。
その他の回答 (2)
- hrm_mmm
- ベストアンサー率63% (292/459)
コマンドプロンプトってwindowsのですよね? windowsのcommand.comが、ブランクを含む文字列をひとつながりの引数として解釈するために、ダブルクォートが必要です。 MySQLは、そこで解釈された後の引数を受け取るので、statment外側のクォートが何であったかは関知しません。 そして、statment内の文字列指定に、シングルが使えるので、コマンドライン入力でも内部のクォートをいちいちエスケープしなくても簡単に外側と区別して記述できると言うことです。
お礼
ご回答ありがとうございます。 「ブランクを含む文字列をひとつながりの引数として解釈」する ということなのですね。 ありがとうございます。
- asuncion
- ベストアンサー率33% (2127/6289)
シングルクォーテーションではうまくいかなくて ダブルクォーテーションではうまくいく、ということは、 コマンドプロンプトにおいては ダブルクォーテーションを使わなければならない、 ということではないでしょうか。 MySQLでは、そういうことになっているのだと思います。
お礼
ご回答、ありがとうございます。 お礼が遅れて申し訳ありませんでした。 いろいろな本をみても、たしかにコマンドプロンプトではダブルみたいですね。 そういうことなのかもしれませんね。 ありがとうございました。
お礼
chukenkenkouさん、恐縮です。 本当にいつもいつも、申し訳ありません。 やはりシングルでも、MySQL側は問題ある、ということではないのですよね。 ありがとうございます。感謝しております。