[ 
http://issues.apache.org/jira/browse/DERBY-533?page=comments#action_12319919 ] 

Rick Hillegas commented on DERBY-533:
-------------------------------------

1) There are some interesting issues here. Let's say that we re-enable these 
datatypes in 10.2. What happens when a client application selects from an NCHAR 
column under the following combinations? What should the ResultSetMetaData say 
the column is? Is the following reasonable?


| NETWORK CLIENT | CLIENT PLATFORM | RESULT TYPE |
|-----------------------------|-----------------------------|----------------------|
| Derby 10.2                 |  jdk1.4                        |   NCHAR         
  |
|-----------------------------|-----------------------------|----------------------|
| Derby 10.2                 |  jdk1.6                        |   NCHAR         
  |
|-----------------------------|-----------------------------|----------------------|
| Derby 10.1                 |  jdk1.4                        |   CHAR          
    |
|-----------------------------|-----------------------------|----------------------|
| Derby 10.1                 |  jdk1.6                        |   CHAR          
    |
|-----------------------------|-----------------------------|----------------------|
| db2jcc                        |  jdk1.4                        |   CHAR       
       |
|-----------------------------|-----------------------------|----------------------|
| db2jcc                        |  jdk1.6                        |   CHAR       
       |
|-----------------------------|-----------------------------|----------------------|

Since all of our string datatypes are represented as unicode, I think it is ok, 
as necessary, to implicitly cast CHAR to NCHAR going from client to server.

I also think it is reasonable to raise an exception if someone runs a 10.1 
server against a 10.2 database.

2) I don't see where the SQL standard addresses coercion between national 
strings and other types. Part 2 section 4.2.1 says that NATIONAL CHARACTER is 
"implementation defined". Part 2 section 6.12 lists legal and forbidden CASTS 
but says nothing about national string types. As always, I welcome being 
educated about what else might be relevant in the spec.

Oracle supports the following coercions but not the inverse coercions and 
Oracle documentation does not address localization issues:

   Datetime/Interval -> NCHAR/NVARCHAR2
   Number -> NCHAR/NVARCHAR2

MySQL does not advertise any ability to cast to/from national strings.

DB2 and Postgres do not support national strings.

In summary, I do not see much guidance here. Derby's previous behavior seems 
reasonable to me: applying localization when coercing between national strings 
and other types.


> Re-enable national character datatypes
> --------------------------------------
>
>          Key: DERBY-533
>          URL: http://issues.apache.org/jira/browse/DERBY-533
>      Project: Derby
>         Type: New Feature
>   Components: SQL
>     Versions: 10.1.1.0
>     Reporter: Rick Hillegas

>
> SQL 2003 coyly defines national character types as "implementation defined". 
> Accordingly, there is considerable variability in how these datatypes behave. 
> Oracle and MySQL use these datatypes to store unicode strings. This would not 
> distinguish national from non-national character types in Derby since Derby 
> stores all strings as unicode sequences.
> The national character datatypes (NCHAR, NVARCHAR, NCLOB and their synonymns) 
> used to exist in Cloudscape but were disabled in Derby. The disabling comment 
> in the grammar says "need to re-enable according to SQL standard". Does this 
> mean that the types were removed because they chafed against SQL 2003? If so, 
> what are their defects?
> ------------------------------------------------------------------
> Cloudscape 3.5 provided the following support for national character types:
> - NCHAR and NVARCHAR were legal datatypes.
> - Ordering operations on these datatypes was determined by the collating 
> sequence associated with the locale of the database.
> - The locale was a DATABASE-wide property which could not be altered.
> - Ordering on non-national character datatypes was lexicographic, that is, 
> character by character.
> ------------------------------------------------------------------
> Oracle 9i provides the following support for national character types:
> - NCHAR, NVARCHAR2, and NCLOB datatypes are used to store unicode strings.
> - Sort order can be overridden per SESSION or even per QUERY, which means 
> that these overridden sort orders are not supported by indexes.
> ------------------------------------------------------------------
> DB2 does not appear to support national character types. Nor does its DRDA 
> data interchange protocol.
> ------------------------------------------------------------------
> MySQL provides the following support for national character types:
> - National Char and National Varchar datatypes are used to hold unicode 
> strings. I cannot find a national CLOB type.
> - The character set and sort order can be changed at SERVER-wide, TABLE-wide, 
> or COLUMN-specific levels.
> ------------------------------------------------------------------
> If we removed the disabling logic in Derby, I believe that the following 
> would happen:
> - We would get NCHAR, NVARCHAR, and NCLOB datatypes.
> - These would sort according to the locale that was bound to the database 
> when it was created.
> - We would have to build DRDA transport support for these types.
> The difference between national and non-national datatypes would be their 
> sort order.
> I am keenly interested in understanding what defects (other than DRDA 
> support) should be addressed in the disabled implementation.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to