У меня есть таблица, имеющий столбец, определенный varchar2 (255 байт), Когда я вставить запись с помощью класса Спринг JDBC У меня есть сообщение об ошибкеOracle VARCHAR2 (байт) против Java байт
; nested exception is java.sql.BatchUpdateException: ORA-12899: deer "DBB"."USERS"."NICK" s³tunu iin ok b³y³k (as²l: 441, maksimum: 255)
Я Обрезка Строка с помощью следующих метод, но он не работает
public static String filterStringForTxnLog(String string) {
try {
String noPipe = string.replace('|', '.');
byte noPipeBytes[]= noPipe.getBytes("UTF-8");
if (noPipeBytes.length > 255) {
byte [] cropBytes = new byte[255];
for(int i=0;i<255;i++){
cropBytes[i]=noPipeBytes[i];
}
return new String(cropBytes);
}
return noPipe;
} catch (Exception e) {
logger.error("Nick filter error string:" + string, e);
return "";
}
}
Когда я пройти следующий размер строки новой строки не соответствует столбец БД.
||123123123123123123123123kşlkşlkşlk12şl3l1k3şl21kşl3üğüğoşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşş123123123123123123123123123123123123123123112321323123123123
В чем проблема бизнеса, которую вы пытаетесь решить? Было бы нецелесообразно пытаться усечь кодированную строку UTF-8 на произвольное количество байтов. Если вы случайно обрезали середину символа, это оставит вас с недопустимой строкой. Возможно, вы хотите усечь строку на число кодов Unicode, которые могут быть закодированы в 255 байт (что все еще проблематично, если у вас есть такие вещи, как объединение символов). Но гораздо вероятнее, что вы хотите сделать что-то вроде объявить столбец 'varchar2 (255 char)' и усечь строку на 255 символов. –
Да, это точное решение, но у меня нет никаких прав на это изменение, поэтому я пытаюсь решить эту проблему на уровне Java, а не на БД. –