From 72ab1ab64dc2fa5bf3ba4e82f59290ce7718b97a Mon Sep 17 00:00:00 2001 From: Eric Long Date: Wed, 30 Oct 2019 12:51:35 -0400 Subject: [PATCH] 0004136: Oracle character set problem with "value too large for column" --- .../org/jumpmind/db/platform/AbstractDatabasePlatform.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/symmetric-db/src/main/java/org/jumpmind/db/platform/AbstractDatabasePlatform.java b/symmetric-db/src/main/java/org/jumpmind/db/platform/AbstractDatabasePlatform.java index 639fe16249..e73b1849b3 100644 --- a/symmetric-db/src/main/java/org/jumpmind/db/platform/AbstractDatabasePlatform.java +++ b/symmetric-db/src/main/java/org/jumpmind/db/platform/AbstractDatabasePlatform.java @@ -404,9 +404,11 @@ protected Object getObjectValue(String value, Column column, BinaryEncoding enco String charValue = value.toString(); if ((StringUtils.isBlank(charValue) && getDdlBuilder().getDatabaseInfo().isBlankCharColumnSpacePadded()) || (StringUtils.isNotBlank(charValue) && getDdlBuilder().getDatabaseInfo().isNonBlankCharColumnSpacePadded())) { - if (column.getCharOctetLength() == 0 || column.getSizeAsInt() == column.getCharOctetLength()) { + if (column.getSizeAsInt() != column.getCharOctetLength()) { + // using multiple-byte character set, the size is maximum number of characters objectValue = StringUtils.rightPad(charValue, column.getSizeAsInt(), ' '); } else { + // single-byte character set or field defined as number of bytes objectValue = charValue + StringUtils.repeat(" ", column.getCharOctetLength() - value.getBytes().length); } }