El deployment (despliegue, paso a producción) de software es a mi juicio el punto más frustrante del ciclo de desarrollo de una aplicación, ya sea web o para escritorio. En el caso de mi último proyecto, mi Everest ha sido la intercalación de SQL Server.
La intercalación (collation) es básicamente la manera en la que un motor de base de datos va a ordenar las listas. En español la 'ch' solía considerarse un carácter que iba después de la c, la ñ sigue colocándose después de la n, etc. Cosa que en inglés no ocurre y en hebreo menos. Pero hay programadores que necesitan definir muy bien este orden y es un problema muy grave para ellos hacer convivir varias intercalaciones.
Parece trivial la definición del orden de una lista pero precisamente la optimización de búsquedas en las bases de datos se basan en la forma en la que los registros de una tabla están ordenados.
Al instalar mi servidor local de SQL Server para desarrollo de una aplicación ASP.NET MVC no pensé que utilizar la intercalación española fuese a darme grandes problemas pero al subir la aplicación a Godaddy me estaba dando un error fatal que me ha tenido varios días parado.
Cambiar la intercalación por defecto de una base de datos se hace de forma intuitiva con el SQL Server Management Studio y no he tenido ningún problema con mis tablas. Lo difícil ha sido cambiarlo en los objetos generados por aspnet_regsql.exe.
aspnet_regsql es una aplicación que genera, entre otras cosas, una serie de tablas y objetos en la base de datos dedicados a la gestión de usuarios de una aplicación. Hay, por lo menos, un procedimiento que depende directamente de la intercalación por defecto establecida en el momento de generar las tablas por lo que aunque se cambie la intercalación por defecto de la base de datos, nunca se va a poder exportar a otro servidor con otra intercalación por defecto.
Para subirla, he tenido que borrar todos los objetos generados (por suerte sigo de pruebas), cambiar la intercalación a Latin y volver a generarlos.
El error típico que sale es
Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "SQL..." in the equal to operation.
0 comentarios:
Publicar un comentario en la entrada