- 締切済み
mysqlバッチモードでのエスケープ文字
mysqlでエスケープ文字を含んだファイルをバッチモードでクエリーを実行させた時、エスケープ文字がそのまま出力ファイルに記述されます。(\tがTABにならずに、\tのまま出力される) バッチモードの場合、どのようにしたらエスケープ文字を正常に出力させる事が出来るのでしょうか。 ちなみに、同様のクエリーをmysql(コマンドラインツール)を起動して直接入力し動作させる、 およびMysql Control Centerで行うと、期待通りの表示(\tはTAB)になります。 よろしくお願いします。Mysqlは ver4.0.18-max-ntです。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- wakame0729
- ベストアンサー率32% (245/765)
linuxでも症状は同じでした。select 'a\tb';というsql文でテストしましたが、mysql上でsqlを入力するとちゃんと[tab]が表現されますが、mysql < test.sqlとすると1行目、行の見出し部分は[tab]になるのですが2行目の結果の部分は「a\tb」と表示されてしまいますね。 最初はシェルが勝手に\tをエスケープしているのかと思ったのですが1行目が[tab]になっているところを見るとそうではないようで。 原因がわからなければ適当な区切り文字で一旦出力して、その後タブに置換したらどうでしょうか。
- wakame0729
- ベストアンサー率32% (245/765)
\tを\\tにしたらどうなりますか?
補足
\tを\\tにしても、出力ファイルには\\tが出力されました。 ちなみに、dos窓で以下のようにして実行しています。 c:\mysql\bin>mysql -u root -p <mysql -u root -p <./test.sql >./test_out.txt http://dev.mysql.com/doc/mysql/ja/batch-mode.htmlにWindowsでの特殊文字による問題発生の場合が示されていたので、 c:\mysql\bin>mysql -u root -p -e "source ./test.sql" >"./test_out.txt" としても、結果は同様でした。 クエリ(test.sql)の中身 use shop; select concat(EmployeeName, "さん\t", "[E-MAIL]\t", EMail) as "[連絡先]" from Employees; 結果(test_out.txt) [連絡先] AAAさん\t[E-MAIL]\tAAA@test BBBさん\t[E-MAIL]\tBBB@test CCCさん\t[E-MAIL]\tCCC@test mysql(コマンドラインツール),Mysql Control Centerでは、test.sqlの中身をカット&ペーストして行っています。
お礼
ありがとうございました。結局バッチモードではエスケープ文字はうまく表現できないと解釈するしかないようですね。ちなみにPostgreでは出来てました。