Working with byte-based strings
ASCII and Latin 1 characters, for example the letter A, consist of one byte. Chinese, Japanese, and Korean characters consist of two or more bytes. The Integration service processes strings by character, not by byte. Some databases, however, process strings by byte, not by character. If the database processes strings by byte and contains multibyte characters, the following string operations should not be sent to the database:
*SUBSTRING, LEFT, and RIGHT functions
*POSITION function
*CAST functions from VARCHAR to VARCHAR where the length is specified, for example, CAST (CUSTOMERS.CUSTOMNAME AS VARCHAR (50))
*Actuate SQL parameters specified using syntax such as CAST (? AS VARCHAR (30))
For example, SUBSTRING (CUSTOMERS.CUSTOMNAME, 1, 7) should return the first seven characters of the customer name, not the first seven bytes. If the database processes strings by byte, the SUBSTRING operation should not be sent to the database.
To indicate that string operations should not be sent to the database, set the UseCharStringImplByDefault attribute to true for the database type in mappings.xml, for example:
<DataSourceMapper Name="MyDatabaseTypeMapper"
UseCharStringImplByDefault="true">
</DataSourceMapper>