db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Knut Anders Hatlen (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (DERBY-5236) Client driver silently truncates strings that exceed 32KB
Date Sat, 02 Jul 2011 14:15:28 GMT

    [ https://issues.apache.org/jira/browse/DERBY-5236?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13059027#comment-13059027
] 

Knut Anders Hatlen commented on DERBY-5236:
-------------------------------------------

Right, I only did a quick search for how length was represented various places, and I haven't
yet done any research into what's the relevant definition for the length field in this particular
method. One example I found was in V4, vol 2, p 48:

Field Length
    format: signed binary integer
    units: characters for DBCS; else bytes
    value:
        0 - 32767 for SBCS and mixed SBCS/DBCS
        0 - 16383 for DBCS

I believe SBCS is single-byte character set and DBCS is double-byte character set. Now, UTF-8
is a variable-width encoding and therefore neither SBCS nor DBCS, strictly speaking.

> Client driver silently truncates strings that exceed 32KB
> ---------------------------------------------------------
>
>                 Key: DERBY-5236
>                 URL: https://issues.apache.org/jira/browse/DERBY-5236
>             Project: Derby
>          Issue Type: Bug
>          Components: Network Client
>    Affects Versions: 10.8.1.2
>            Reporter: Knut Anders Hatlen
>            Assignee: Knut Anders Hatlen
>         Attachments: repro.diff, write-full-string.diff
>
>
> Can be seen with this JUnit test case that retrieves a VARCHAR value with 20000 characters.
With the client driver, the string is truncated to 10900 characters (32700 bytes when encoded
in UTF-8).
>     public void testLongColumn() throws SQLException {
>         PreparedStatement ps = prepareStatement(
>                 "values cast(? as varchar(20000))");
>         char[] chars = new char[20000];
>         Arrays.fill(chars, '\u4e10');
>         String str = new String(chars);
>         ps.setString(1, str);
>         JDBC.assertSingleValueResultSet(ps.executeQuery(), str);
>     }

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Mime
View raw message