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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top