미리 준비된 문장을 사용하지 않고 MySQL 데이터베이스에 바이너리 데이터를 삽입하려고합니다. 그 이유는 수천 개의 문장을 한 번에 하나의 문장으로 결합하기 때문입니다. 나는 다음과 같은 문장을 시도MySQL에 바이너리 데이터 삽입하기 (PreparedStatement없이)
(정확히 MySQL이 & 수입 작품을 덤프하는 방법),하지만 모두 실패 : MY_TABLE 값으로
INSERT (1, 'g = F |} X ', 2);
INSERT INTO my_table VALUES (1, CAST ('g = F | ) X 'AS BINARY), 2);
INSERT INTO my_table VALUE (1, CONVERT ('g = F | ) X ', BINARY), 2); MY_TABLE 값으로
INSERT (1, BINARY 'g = F |} X'는 2)
내가 오류는 다음과 같습니다
com.mysql.jdbc.MysqlDataTruncation : 데이터 잘림 : 데이터가 너무 긴 행 1
에서 열 'binary_data'내가이 문을 실행하는 데 사용하는 코드는 간단하다 :
conn.createStatement(). executeUpdate (sql);
자는 PreparedStatements는 잘 작동 (그러나이 경우 너무 느리다)
데이터베이스의 실제 문자열 내가 조금 differet 표시
그램 = ÷의 | ¸} X의 £의 난 [
이진 전망 : 67 F7 3D 81 19 46 F3 7C B8의 7D 58 8C 10 A3 EC 5B
자바 바이트 : 103, 61, -127, -13, 25, -13, 70, 124, -72, 125, 88, -116, 16, -93, -20, 91
인코딩과 관련이 있습니까?
어떤 힌트가 많이 apprecaited, 롬
바이너리 데이터를 삽입 할 수 있습니다 :
직접 예를 들어 0X
에 의해 HEX로 변환을 덧붙일 바이트를 작성하여 바이너리 데이터를 삽입 할 수 있습니다 가능한 'Statement'를 사용하면 가능합니다. –
당신이 한 "최적화"는 아마도 가치가 없다는 것을 알고 있습니까? 준비된 문장의 요점은 그것들이 MySQL에 의해 "프리 컴파일"되어 MySQL에 매개 변수를 제공한다는 것입니다. 명령문을 연결하든 그렇지 않든 관계없이 어쨌든 수천 개의 값을 보냅니다. 그리고 당연히 바이너리 데이터를 쉽게 삽입 할 수 없기 때문에 이것은 문제가되었습니다. –
어떻게'INSERT' 문을 생성하고 있습니까? 인코딩은 문제가 될 수 있지만 올바른 이스케이프 (예 : 바이너리 데이터에'''가있는 경우)에 대해 걱정해야합니다. 또한 당신의 JDBC [connection parameters] (http://dev.mysql.com/doc/refman/5.5/en/connector-j-reference-configuration-properties.html)에서'useUnicode'와'characterEncoding '? –