• 締切済み

¥を含む文字列を挿入するとエラーとなります

こんにちわ、よろしくお願いします。 OS:WindowsXP PostgreSQL:8.4.0 DBの文字コードはUTF8で構築しています。 【現象】 文字型のカラムに¥を含んだ文字列を挿入しようとすると以下のエラーになります。 WARNING: nonstandard use of escape in a string literal at character 331 SQL実行中に以下のエラーが発生しました。 ERROR: invalid byte sequence for encoding "UTF8": 0x00 エラーとなるのは例えば「C:\temp\hoge.txt」といった文字列です。 ただし、 「C:/temp/hoge.txt」 「C:\\temp\\hoge.txt」 とした場合は正常に挿入が出来ます。 8.1.11で同じプログラムを動かしているときは問題なく動作していました。 PostgreSQLを最新の8.4.0にバージョンアップしたところ上記のエラーが発生するようになりました。 エンコードの問題かと思い Postgresql.confのclient_encodingを色々設定してみましたが、解決しませんでした。 解決法が見当たらず困っています。 よろしくお願い致します。

みんなの回答

  • okinakak
  • ベストアンサー率0% (0/1)
回答No.2

\(バックスラッシュ) は制御文字です。 SQL文の中で特殊な文字コードを表現するために使われます。 たとえば、\n なら改行を意味します。 今回の場合、 ERROR: invalid byte sequence for encoding "UTF8": 0x00 とのことなので、SQL文の中に "\0" のような文字が 含まれているのではないでしょうか? 文字として扱いたいなら、必ず"\\"とエスケープする必要があります。

  • goold-man
  • ベストアンサー率37% (8365/22183)
回答No.1

\は日本語特有記号なので「/」(スラッシュ)に代えます。 プログラムに全角漢字など使うとエラーになります。(半角英数文字を使う)

daye001
質問者

お礼

早速の回答ありがとうございます。 >\は日本語特有記号なので「/」(スラッシュ)に代えます。 ただ、8.1.11の時は問題なくプログラムが動いていました。 最新版では、その辺が厳密になったということでしょうか? よろしくお願い致します。

関連するQ&A

  • HTML文字列を取得→加工→書き出すスクリプト

    CGI(perl)がこういうHTMLを書き出すのですが、 <html> <body> <p><a href="file:///C:\temp\hoge1.txt">file:///C:\temp\hoge1.txt</a></p> <p><a href="file:///C:\temp24\hoge2.txt">file:///C:\temp24\hoge2.txt</a></p> :(中略) <p><a href="file:///C:\temp78\hoge15.txt">file:///C:\temp78\hoge15.txt</a></p> </body> </html> ↑のハイパーリンクに加え、hoge.txtが置かれている親フォルダへの リンクも併設したいです。イメージとしては、次のような感じです、 <html> <body> <p><a href="file:///C:\temp\hoge1.txt">file:///C:\temp\hoge1.txt</a><br> ↑のファイルがあるフォルダを開くなら<a href="file:///C:\temp\">こちら</a></p> <p><a href="file:///C:\temp24\hoge1.txt">file:///C:\temp24\hoge1.txt</a><br> ↑のファイルがあるフォルダを開くなら<a href="file:///C:\temp24\">こちら</a></p> :(中略) <p><a href="file:///C:\temp78\hoge15.txt">file:///C:\temp78\hoge15.txt</a><br> ↑のファイルがあるフォルダを開くなら<a href="file:///C:\temp78\">こちら</a></p> </body> </html> みたいに、ページを表示するたびに フォルダパスも記述されるという… JavaScriptで実現できますでしょうか?よろしくお願い致します。

  • 列を挿入したい

    環境はxp、apache2、php5、Postgresql8.2です。 1台のPCをサーバ&クライアントにしています。 ただ今PHPとPostgresqlの勉強をしています。 pgadmin3で、「object」という列を 「term」という列の後に追加したいと思い 以下のSQLを発行しました。 ALTER TABLE "m_lecture" ADD "object" text NOT NULL AFTER "term"; 以下のようなエラーになります。 ERROR: syntax error at or near ""term"" SQLステート:42601 文字:52 ご教示して頂けたら幸いです。

  • CSEでのデータベース作成時のエラーについて

    こんばんは。 PostgreSQLについて質問させてください。 CSEを使ってSQLの勉強をしていますが、 データベースを作成した際に、 WARNING: nonstandard use of escape in a string literal at character 42 WARNING: LOCATION is not supported anymore という表示がされ、 その後、テーブル作成などをすると エラーになり実行できません。 例えば、 create table テーブル名( id number(8) primary key, name char(10), birth date ) ; を実行した際に、 SQL実行中に以下のエラーが発生しました。 ERROR: syntax error at or near "(" at character 32 というエラーになります。 この原因は、Encodingの問題だと思っていますが、 どのように解決したらいいか教えてください。 また、Encodingの問題ではない場合は その際の対処法を教えてください。 以上、ご回答のほどお願いいたします。

  • UTF8が16進文字列に化ける(変わる?)

    教えてください。 Nokogiriというgemを使ってXMLを処理しています。 Nokogiriへの入力はUTF8なのですが、 XML処理後の出力が16進文字列に変わってしまうのです。 環境はLinux (Linuxについてはあまり詳しくないので 情報が不十分かもしれません。すいません。) 16進文字列をUTF8に戻すこともできるのですが、 できれば、無駄な手間はかけたくありません。 もし、原因に心当たりがありましたら、 教えていただけると助かります。 Encoding.default_internal、 Encoding.default_externalなども怪しいと思います。

  • C# 文字コード変換

    お世話になります。 宜しくお願いします。 C#でプログラムを開発しております。 その中で、文字列をShift-JISでテキストファイルへ書き出す という処理があるんですが 以下のように指定しても文字コードがUTF-8で書き出されているようです。 コードを調べましたが間違いが見つけられません。 どこか間違いはございますでしょうか。 ご教授宜しくお願いします。 ・文字コードを判別する場所 : http://encode-detector.uic.jp/tool ・テキストの形式 :ファイル名.DMD /////////////// 以下コード /////////////////////////     String param = "テキストへ書き込む内容";     System.IO.StreamWriter sw =          new System.IO.StreamWriter(             @"C:\hoge.DMD",              false,             System.Text.Encoding.GetEncoding("Shift_JIS") );     System.Text.Encoding src = System.Text.Encoding.UTF8;     System.Text.Encoding dest = System.Text.Encoding.GetEncoding("Shift_JIS");     byte[] temp = src.GetBytes(param);     byte[] sjis_temp = System.Text.Encoding.Convert(src, dest, temp);     param = dest.GetString(sjis_temp);     sw.Write(param);     sw.Close();

  • cshの文字列置換

    ヤマトです。 cshでファイル文字列を置換したいのですが、分かりません。 環境はRed Had Linux7.2です。 hoge1.txt の中の 'HIDUKE' という文字列を今日の日付に置換し、 hoge2.txt に出力するようなシェルを作りましたが、正常に動作しません。 ====hoge1.txt(置換前)==== 今日はHIDUKEです。 ====hoge1.txt(置換前)==== 今日は030814です。 ====SAMPLE.sh(一部抜粋)==== set TODAY = `date +"%y%m%d"` sed 's/HIDUKE/$TODAY/g' < hoge1.txt > hoge2.txt 以上のようなシェルを作りました。 結果として、hoge2.txtには出力されるのですが、 「今日は$TODAYです」 となってしまいます。 変数の値を置換するにはどのようにしたら良いのでしょうか? 教えて頂けると有り難く思います。宜しくお願いします。

  • シェルスクリプトを用いて、ある特定の文字列の前に文字列を挿入

    こんにちは。 シェルスクリプトを用いて、ある特定の文字列の前に文字列を挿入したいと思います。 ・sample.txt (挿入前) -- <ABC> <ABC> Hello! </ABC> </ABC> -- ↓ ・sample.txt (挿入後) -- <ABC> <ABC> Hello! </ABC> Good Morning Good Evening </ABC> -- 上記のように、テキスト末尾から検索して、 はじめて表れた"</ABC>"のタグの前に、 Good Morning Good Evening という2行の文字列(無理なら1行でも)を追加したいと考えています。 "</ABC>"タグは2つありますが、末尾から検索して初めて表れたもののみ対象です。 このような操作を行うには、 どのようにシェルを組み合わせれば良いのでしょうか? grepやsedを用いて考えてはいますが、よく分かりません。 (grepで末尾から初めて表れた"</ABC>"の行番号を取得し、 その上に、sedで文字列を挿入するなどですが・・・よく分かりません) どなたか、よろしくお願いします。

  • grepで検索文字列が完全一致した行だけ取り出す方法

    grepの文字列検索で検索文字列が単語として、完全一致した行だけ取り出す方法はないでしょうか? 通常は grep hoge hoge.txt と打つと、hogeが含まれる行が出力されますが、今回は含まれる行ではなくて完全に文字列が一致した行だけ取り出したいのです。 例えばhoge.txtの中に cc ghoge kkl hogem jjll hoge という3行があったとしたら最後の行でhogeという文字が空白で区切られた行だけ取り出したいのです。 何かよい方法があれば教えてください

  • バイト列とバイナリ列の違いが分かりません。

    掲題について質問です。 例えばプログラミングにおける文字列に対して 時々、「文字列はバイト列とみなすことができる。」 という記述を見かけます。 具体的にいうとRuby1.8系における文字列がそのバイト列らしいのです。 例えば、 hoge = "文字列"; print hoge.unpack("C*") とすると [230, 150, 135, 229, 173, 151, 229, 136, 151] というようにUTF-8で符号化された各8bitの0~255までの値の配列が返って来ます。 これはバイト列になるのですか? それとも hoge = "文字列"; print hoge.unpack("H*") ["e69687 e5ad97 e58897"] (それぞれ一文字が1byte3つ分の列となっています。) このように16進数で表された形式がバイト列というあつかいなのでしょうか? そしてバイナリ列とバイト列の違いはなんでしょうか? よろしくご教授ください。

  • MySQLへの特殊文字の挿入について

    こんばんは。今MySQLへのデータの挿入時に特殊文字を挿入することが出来ないエラーに悩まされています。初心者で大変申し訳ございませんが、色々と調べてみたのですがどうしても解決できなかった為、質問させて頂きました。お手数をおかけしますがご教授いただければ幸いです。 問題というのは、MySQLへのデータの挿入時の文字列に特殊文字が含まれていた場合、この場合文字列中に「?」が含まれていた場合にこの文字列をinsertすると「?」が「1」に変換されてしまうのです。環境としてはPHPのPEARからの利用で、文字列はDBクラスのquoteメソッドでエスケープしてから挿入しております。文字列の文字コードはEUC-JPです。バックアップ用ファイル(CSV形式のテキストファイル)には正しく記録されておりますのでMySQLの仕様に関しての問題ではないかとは考えておりますが、どうしても解決できず困っております。お手数をおかけしますがよろしくお願いいたします。

    • ベストアンサー
    • MySQL