1

MAMP を使用して MySQL データベースからエクスポートした blob 16 進値がいくつかあります。これらの値を H2 データベースに追加しようとしましたが、エラーが発生し続けます。

    org.h2.jdbc.JdbcSQLException: Hexadecimal string with odd number of characters: "80273753912952185238922745508880797601482513992540829416944108482201678079823009423240796439787688076562876906583780517704249256776629049440054030707230103901187860416530898080584543691951511619479802824069658267005899514817053628822676904964354186008390099680162497341280836375590099576180828248580706583256766125057680523862652582731318422096302127828322568212884418137380647350895148022669223845592468192584084729728626393575544"; SQL statement:
INSERT INTO `StatisticsExplanationActivity` VALUES(2, '2012-06-01 11:36:36', '0', '2012-06-01 11:36:37', 1, 16, 0x00aced0005737200136a6176612e7574696c2e41727261794c6973747881d21d99c7619d03000149000473697a6578700000000577040000000a7400196d757365756d507265666572656e63655f6f7269656e74616c7400166d757365756d507265666572656e63655f70686f746f740014696465616c686f6c79646179735f75726261696e7400176e696768744576656e696e67486f6262795f6d757369637400106d75736963616c54617374655f706f7078) -- (2, '2012-06-01 11:36:36', '0', '2012-06-01 11:36:37', 1, 16, 80273753912952185238922745508880797601482513992540829416944108482201678079823009423240796439787688076562876906583780517704249256776629049440054030707230103901187860416530898080584543691951511619479802824069658267005899514817053628822676904964354186008390099680162497341280836375590099576180828248580706583256766125057680523862652582731318422096302127828322568212884418137380647350895148022669223845592468192584084729728626393575544) [90003-166]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:329)
    at org.h2.message.DbException.get(DbException.java:169)
    at org.h2.message.DbException.get(DbException.java:146)
    at org.h2.util.StringUtils.convertHexToBytes(StringUtils.java:990)

同じ INSERT 行が MySQL で正常に機能します。H2 のマルチスレッド モードが有効になっている場合に、これが発生する可能性があることを他のトピックで見ました。試してみたかったのですが、Play! を使用してそのパラメーターを設定する方法がわかりません。1.2.x.

編集: MULTI_THREADED を試してみましたが、それでも同じエラーが発生します。EDIT2:私が使用した16進数を投稿するのを忘れました:

0xaced0005737200136a6176612e7574696c2e41727261794c6973747881d21d99c7619d03000149000473697a6578700000000577040000000a7400196d757365756d507265666572656e63655f6f7269656e74616c7400166d757365756d507265666572656e63655f70686f746f740014696465616c686f6c79646179735f75726261696e7400176e696768744576656e696e67486f6262795f6d757369637400106d75736963616c54617374655f706f7078
4

1 に答える 1

2

H2 データベースは を数値 (Java BigDecimal) として解釈し0x00aced0...、toString() 表現 (10 進数) を 16 進数でエンコードされたバイナリとして変換しようとします。

もちろん、これはあなたが望むものではなく、約 50% のケースで失敗します。

したがって、代わりに(引用)0x00aced0...を使用する必要があります'00aced0...'

于 2012-07-24T15:00:50.473 に答える