¿ Bug en Oracle 9 ?
Pregunto, porque no estoy seguro, digamos que "a mi" me parece un bug.
Durante los ultimos 10 dias estuve trabajando en una puesta en produccion de un aplicativo nuevo con migración desde un aplicativo viejo.
Y ahí fue donde apareció este tema. Desde que tengo memoria cuando se indica en una tabla el tipo de campo, por ejemplo varchar(10), quería decir "exactamente" eso, que en ese campo podrían entrar hasta 10 caracteres, quizas ninguno, uno o hasta diez y no mas.
Eso es (o era asi) en todos los motores SQL que conozco, Access, Fox y etc.
El indicar la longitud de un campo quería indicar caracteres.... pero.... con la modernidad que nos come (digamos unicode, ascii, iso, etc) parece que ahora las cosas cambiaron.
PROBLEMA DETECTADO
Existe una tabla con un campo con varchar(10) y NO puede contener el string '1áéíó€'
¿ COMO ?
Oracle 9 entiende que varchar 10 quieren decir 10 bytes y NO 10 caracteres, y como los símbolos especiales (áéíó€ y otros) ocupan 2 bytes, entonces ese string (1áéíó€) mide 11 bytes y da error.
SI!, como lo cuento.
SOLUCION
modificar la estructura de tablas (todas), indicando que los campos son
varchar (10 char)
en lugar de varchar( 10 )
o es una chapuza o me perdí de algo...
Durante los ultimos 10 dias estuve trabajando en una puesta en produccion de un aplicativo nuevo con migración desde un aplicativo viejo.
Y ahí fue donde apareció este tema. Desde que tengo memoria cuando se indica en una tabla el tipo de campo, por ejemplo varchar(10), quería decir "exactamente" eso, que en ese campo podrían entrar hasta 10 caracteres, quizas ninguno, uno o hasta diez y no mas.
Eso es (o era asi) en todos los motores SQL que conozco, Access, Fox y etc.
El indicar la longitud de un campo quería indicar caracteres.... pero.... con la modernidad que nos come (digamos unicode, ascii, iso, etc) parece que ahora las cosas cambiaron.
PROBLEMA DETECTADO
Existe una tabla con un campo con varchar(10) y NO puede contener el string '1áéíó€'
¿ COMO ?
Oracle 9 entiende que varchar 10 quieren decir 10 bytes y NO 10 caracteres, y como los símbolos especiales (áéíó€ y otros) ocupan 2 bytes, entonces ese string (1áéíó€) mide 11 bytes y da error.
SI!, como lo cuento.
SOLUCION
modificar la estructura de tablas (todas), indicando que los campos son
varchar (10 char)
en lugar de varchar( 10 )
o es una chapuza o me perdí de algo...
Comentarios