tengo la siguiente tabla "traducción" en una base de datos Oracle 10g:Oracle, UTF-8, NVARCHAR2 y mucha confusión
ID VARCHAR2(100 BYTE)
LANGUAGE CHAR(2 BYTE)
COUNTRY CHAR(2 BYTE)
TRANSLATION NVARCHAR2(2000 CHAR)
TRACK_TIMESTAMP DATE
TRACK_USER VARCHAR2(2000 BYTE)
Cuando trato de hacer esto:
update translation set translation = 'œ' where id = 'MY_ID' And language = 'fr';
Luego ejecutar esto:
select * from translation where id = 'MY_ID' and language = 'fr';
y la columna de la traducción muestra: S
en lugar de œ
y tengo ni idea por qué
Debido a problemas heredados, no puedo convertir toda la base de datos para usar UTF-8, ¿hay alguna otra opción?
Actualmente el juego de caracteres nacional es AL16UTF16. El conjunto de caracteres ordinarios es WE8ISO8859P1.
Actualmente estoy usando Java 1.6
Lo anterior es un ejemplo simplificado. Esto es lo que la consulta se parece en mi aplicación real:
UPDATE TRANSLATION SET TRANSLATION=? WHERE TRANSLATION.COUNTRY=? and TRANSLATION.ID=? and TRANSLATION.LANGUAGE=? 1=1,800 - 2,500 œufs par heure 2=CA 3=3_XT_FE_ECS18 4=fr
El problema aquí es en lugar de añadir œufs
añade ¿ufs
¿Cuál es el conjunto de caracteres nacional de la base de datos? ¿Está realmente generando instrucciones UPDATE que usan literales de cadena codificados? ¿O estás usando bind variables? Si está utilizando variables de vinculación, ¿la aplicación identifica el tipo de datos pasados como NVARCHAR2 en lugar de solo VARCHAR2? –
AL16UTF16. El conjunto de caracteres ordinarios es WE8ISO8859P1. No, no estoy generando declaraciones de actualización que usen literales de cadenas codificadas. Traté de simplificar el ejemplo tanto como sea posible. Actualmente usamos s2j y también probé esto con springs jdbcTemplate y obtuve: '¿ufs'. No estoy seguro si s2j lo estaba reconociendo como un nvarchar2, pero cambió su tipo de retorno de una cadena a un objeto, así que no creo que lo trate como varchar2. Gracias por su ayuda, avíseme si me falta otra información. – testing123