Migrar una aplicación existente para aceptar Unicode
-
09-06-2019 - |
Pregunta
Estamos en el proceso de actualizar nuestra aplicación a compatibilidad total con Unicode, ya que recientemente obtuvimos Delphi 2009, que proporciona esto de manera inmediata.Estoy buscando a alguien que tenga experiencia en actualizar una aplicación para que acepte caracteres Unicode.Responde específicamente a cualquiera de las siguientes preguntas.
- Necesitamos cambiar VarChars a NVarchar, Char a NChar.¿Hay alguna trampa aquí?
- Necesitamos actualizar todas las declaraciones SQL para incluir N delante de cualquier cadena SQL.Por lo tanto, Update tbl_Customer set Name = 'Smith' debe convertirse en Update tbl_Customer set Name = norte'Herrero' .¿Hay alguna forma de establecer esto de forma predeterminada para ciertos campos?Parece extraordinario que todavía sea necesario.
- ¿Es posible configurar algún valor predeterminado en SQLServer que simplifique esto?
ps: También necesitamos actualizar nuestro código Oracle.
Solución
Oracle no requiere que uses nvarchar
para almacenar cadenas Unicode: el servidor se puede configurar para almacenar varchar2
en UTF-8.Si antes solo admitía ASCII, debería ser transparente.Esto debería evitar la necesidad de toda la búsqueda y reemplazo del lado de la aplicación para '
a N'
.
En cuanto al punto de Damien:Puede que no te ayude ahora, pero deberías darle prioridad a deshacerte de las consultas no parametrizadas.No son más que un lastre para su sistema desde el punto de vista de mantenimiento, rendimiento y seguridad.
Otros consejos
Lo obvio con SQL Server es que los límites para nchar/nvarchar son la mitad de sus contrapartes char/varchar (a menos que migre todo > 4000 a nvarchar(max))
Damián
No estoy seguro de qué tan útil sea tu respuesta.Tenemos una gran cantidad de 700.000 líneas de código base compilado que se escribió durante los últimos diez años y que contiene una gran cantidad de consultas SQL.La mayoría están estandarizados a unas pocas funciones que son la base de la mayoría de las actualizaciones de la base de datos.Estos se pueden actualizar de forma muy sencilla.Sin embargo, también debemos verificar todas las cláusulas Where para CustomerName = '%s', que ahora debería ser CustomerName = N'%s'.
Esta es una pregunta real que necesita una respuesta real.