MySQLデータベースにいくつかのバイナリデータを挿入しようとしています。この理由は、何千ものステートメントを1回の挿入で1回の挿入に連結するためです。 (MySQLは&輸入作品をダンプ正確にどのように)バイナリデータをMySQLに挿入する(PreparedStatementを使用しない)
私は、次のステートメントを試してみましたが、インクルードがすべて失敗している:my_tableにVALUES INTO
INSERT(1、 'G = F |} X '、2);
INSERT INTO my_table VALUE(1、CAST( 'g = F| )X ' AS BINARY)、2);
INSERT INTO my_table VALUE(1、CONVERT( 'g = F| )X '、BINARY)、2);
:
|(2 '} X、G = F'、1、BINARY)私が手にエラーがあるMY_TABLE値に
INSERT com.mysql.jdbc.MysqlDataTruncation:データの切り捨て:行1
でのデータ列には長すぎる「binary_data」私は文を実行するために使用するコードは単純です:
conn.createStatement()。executeUpdate(sql);
のPreparedStatementsが正常に動作(この場合には遅すぎる)
データベース内の実際の文字列Iは少しdifferet表示:
G =÷の|¸} Xの£iは【
バイナリビュー:67 3D 81 F7 19 F3 46 7C B8 7dと58 8C 10 A3 EC 5B
のJavaバイト:103、61、-127、-9、25 -13、70、124、 -72,125,88、-116、 16、-93、-20、91
これはエンコーディングとは何かだろうか?
任意のヒントがはるかにapprecaited、 Roの
バイナリデータは 'PreparedStatement' OR' CallableStatement'なく通って挿入することができます単純な 'Statement'を使って可能です。 –
あなたがした「最適化」はおそらく役に立たないと知っていますか?プリペアドステートメントのポイントは、それらがMySQLによって「プリコンパイル」されており、MySQLにパラメータを供給することだけです。文を連結するかどうかに関係なく、何千もの値を送信します。そして当然、バイナリデータを簡単に挿入することはできないので、これは問題であることが判明しました。 –
どのように 'INSERT'文を生成していますか?エンコーディングは問題になるかもしれませんが、正しいエスケープ(例えば、バイナリデータに '' 'がある場合)についても心配する必要があります。 'useUnicode'や' characterEncoding'のようなあなたのJDBC [接続パラメータ](http://dev.mysql.com/doc/refman/5.5/en/connector-j-reference-configuration-properties.html)もチェックしてください。 '? –