Document Type | Troubleshooting
Category | Migration
Applicable Product Version | 7FS02PS
Document Number | TMITS004
Issue
During the process of performing Tibero to Tibero data migration using the Table Migrator tool,
an error JDBC-90651: Failed to convert given data occurs on some tables, causing migration failure.
NoteProblematic Version: tibero7.2.1
Part of migrator log error
ERROR[17:09:08,187][L0.TbDPLDataLoader0]DataLoaderManager.run()(273)
java.sql.SQLException: JDBC-90651:Failed to convert given data.
at com.m.internal.jdbc.err.MInternalError.newSQLException(Unknown Source)
at com.m.internal.jdbc.data.charset.CharsetMapper.stringToBytes(Unknown Source)
at com.m.internal.jdbc.data.DataTypeConverter.getDBEncodedBytes(Unknown Source)
at com.m.internal.jdbc.data.DataTypeConverter.fromString(Unknown Source)
at com.m.internal.jdbc.data.DataTypeConverter.castFromString(Unknown Source)
at com.m.internal.jdbc.dpl.binder.DPLStringBinder.bind(Unknown Source)
at com.m.internal.jdbc.dpl.MInternalDirPathStream.copyStream(Unknown Source)
at com.m.internal.jdbc.dpl.MInternalDirPathStream.loadStreamBatch(Unknown Source)
at com.m.migrator.loader.tb.TbDPLDataLoader.load(TbDPLDataLoader.java:373)
at com.m.migrator.loader.DataLoaderManager.run(DataLoaderManager.java:186)Part of jdbc dbg log
14:34:44.790 [L0.TbDPLDataLoader0] java.sql.SQLException: JDBC-90651:Failed to convert given data. at com.m.internal.jdbc.err.MInternalError.newSQLException(MInternalError.java:596) at com.m.internal.jdbc.data.charset.CharsetMapper.stringToBytes(CharsetMapper.java:256) at com.m.internal.jdbc.data.DataTypeConverter.getDBEncodedBytes(DataTypeConverter.java:2106) at com.m.internal.jdbc.data.DataTypeConverter.fromString(DataTypeConverter.java:1892) at com.m.internal.jdbc.data.DataTypeConverter.castFromString(DataTypeConverter.java:1072) at com.m.internal.jdbc.dpl.binder.DPLStringBinder.bind(DPLStringBinder.java:45) at com.m.internal.jdbc.dpl.MInternalDirPathStream.copyStream(MInternalDirPathStream.java:225) at com.m.internal.jdbc.dpl.MInternalDirPathStream.loadStreamBatch(MInternalDirPathStream.java:400) at com.m.migrator.loader.tb.TbDPLDataLoader.load(TbDPLDataLoader.java:373) at com.m.migrator.loader.DataLoaderManager.run(DataLoaderManager.java:186) Caused by: java.sql.SQLException: JDBC-590742:Character set conversion failed: unknown character. - 65 at com.m.internal.jdbc.err.MInternalError.makeSQLException(MInternalError.java:483) at com.m.internal.jdbc.err.MInternalError.newSQLException(MInternalError.java:566) at com.m.internal.jdbc.err.MInternalError.newSQLException(MInternalError.java:585) at com.m.internal.jdbc.data.charset.UTF8CharToByteConverter.convString(UTF8CharToByteConverter.java:151) at com.m.internal.jdbc.data.charset.UTF8Encoder.stringToBytes(UTF8Encoder.java:102) at com.m.internal.jdbc.data.charset.CharsetMapper.stringToBytes(CharsetMapper.java:253) ... 8 more
Cause
- During the UTF16 to UTF8 conversion process, an invalid surrogate pair value was treated as UTF-16, causing JDBC-90651 error.
- Due to this cause, when JDBC retrieves a String via getString, a corrupted string is already input during the conversion process, leading to JDBC-90651 error in the migrator.
Solutions
Apply the patch below to resolve the issue. (Applied patch: 329001a_jdbc)
- The 329001a_jdbc patch adds processing logic for the UTF16 to UTF8 conversion process area.
CautionApply the patch through technical support provided by Tmax Tibero.
Note[Terminology Explanation]1. Surrogate Area : In Unicode, this is the range used to represent supplementary characters in UTF-16. This area is not considered a character on its own. UTF-16 can represent up to 65,536 characters, and the Surrogate Area is used to represent characters beyond this range. This area consists of a combination of High Surrogate and Low Surrogate. Both parts must be present and within a valid range to be considered valid.2. High Surrogate : The front (upper) part of the Surrogate Area.3. Low Surrogate : The back (lower) part of the Surrogate Area.4. Surrogate pair : A pair consisting of High Surrogate + Low Surrogate. It is the encoding structure used in UTF-16.5. subChar : A substitute character used to handle encoding errors or incorrect parts.6. Char : A 2-byte unit code read in UTF-16.