how to handle data containing '\0'
От | EBIHARA, Yuichiro |
---|---|
Тема | how to handle data containing '\0' |
Дата | |
Msg-id | 001f01c679a9$a3627350$360aa8c0@ipljp.local обсуждение исходный текст |
Ответы |
Re: how to handle data containing '\0'
|
Список | pgsql-jdbc |
Hi experts, I need to handle String data containing '\0' in my Java + JDBC program. Such data can happen at other systems and be sentto PostgreSQL. Here is a sample to simulate it in Java code. char c = '\0'; String val = "abc" + c + "def"; Now I have to support two versions of drivers, 7.4 and 8.1, but the behavior of driver depends on versions when I insertthis String value. === pg74.216.jdbc3.jar === java.lang.IllegalArgumentException: \0 not allowed at org.postgresql.jdbc1.AbstractJdbc1Statement.escapeString(AbstractJdbc1Statement.java:1152) at org.postgresql.jdbc1.AbstractJdbc1Statement.setString(AbstractJdbc1Statement.java:1133) at org.postgresql.jdbc1.AbstractJdbc1Statement.setString(AbstractJdbc1Statement.java:1116) at Bug5391.main(Bug5391.java:24) === postgresql-8.1-405.jdbc3.jar === Successfully finished without exception but the string is truncated at '\0' and only the first three characters, "abc", isinserted. (I verified this with psql on the server side) I understand the current protocol does not allow '\0' in String and basically I should remove '\0' before I try to insertbut I and team members may forget it somewhere. I'm feeling the 8.1 behavior is worse than 7.4 because user data is truncated withoutnotice. For the sample above, I expect "abcdef" rather than "abc". What do you think about this? My idea is to introduce new connection parameter to determine how to behave against '\0'. Options may be - throws an exception - truncates at '\0' - removes '\0' Thanks, ebi
В списке pgsql-jdbc по дате отправления: