質問: こんにちは、よろしくお願いいたします。 ### 前提・実現したいこと OracleDBから取得したレコードをMySQLにINSERTで挿入したい。 ### 発生している問題・エラーメッセージ OracleDBから取得したレコードを、MySQLの全く同じ構造のテーブルに挿入したいのですが、一部データに ``` ?!"#$%&'()=~ ``` という記号が含まれていて下記エラーが発生してしまいます。 ``` ERROR 1064 (42000) at line 2: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '()=~','?!"#$%&'()=~','?!" '1000025677','','',''' at line 13 ``` Oracleのq['']のように、囲うことでエスケープできるものなどがあればいいのですが。。。 方法があればご教授お願いいたします。 ちなみに、レコード文はプログラムで生成しています。 ### 該当のソースコード ``` INSERT INTO test VALUES ( 'R1fDIRzzTDYY','"!#$%&'()"@test.com',null,'𪘂齩𪘚齭齰齵𪚲','𪘂齩𪘚齭齰齵𪚲','𪘂齩𪘚齭齰齵𪚲𪘂齩𪘚齭齰齵𪚲',null,null,null,null,null,null,null,null,null,null,null,TO_DATE('2017-03-22 11:10:10','YYYY/MM/DD HH24:MI:SS'),'R1fDIRzzTDYY',null,null,'01', } ``` ### 試したこと QUOTE()で囲った ### 補足情報(FW/ツールのバージョンなど) ・データに4文字バイトが含まれていますが気にしないでください。 ・MySQLバージョン:5.7
回答: 直接SQLを呼んでいる場面なら、自分で「文字列中の`'`は`''`で置き換える」という作業が必要となります。何かしらのプログラムからMySQLを呼ぶのであれば、バインドしてしまうのがいちばん手っ取り早いです。 なお、 > > データに4文字バイトが含まれていますが気にしないでください。 > > > MySQLの`utf8`は、**4バイト文字に非対応です**。`utf8mb4`が必要となります。