14 enero 2008

Sql server y el collation de los huev...

A ver, por donde empezar....ummmm...sí, como, no por el principio:

Tenemos un cliente con un equipo en el que está instalado el Sqlserver express con dos bases de datos de nuestro programa, hasta ahora todo funcionaba correctamente, lleva más de un año trabajando sin problemas. Pero hace un par de días nos llamó porque al realizar un proceso de importación de tarifas le fallaba, sin entrar en detalles del programa, el hecho es que durante la importación de las tarifas se genera una vista de datos de una tabla de una de las bases de datos sobre la otra base de datos. El error en cuestión era algo así como que no se podían comparar campos definidos como "Modern_Spanish_CI_AS" y "Modern_Spanish_CI_AI".

Tras investigar un poco averiguamos que este parámetro se llama collation o en español intercalación. Pues bien este parámetro define si las comparaciones de cadenas tendrán en cuenta mayúsculas, acentos...

Teniendo ya un poco más de idea empezamos a investigar que configuración de collation teníamos en las bases de datos y he aquí que encontramos el error, cada una estaba definida con un collation diferente.

La solución era sencilla cambiar el collation de una de ellas, nos decidimos por la más pequeña y sencilla, tenía menos tablas y apenas tenía FOREIGN KEYS (cuando existe una FOREIGN KEY no se puede cambiar el collation del campo debes eliminar antes la clave). Una vez solucionado el problema probamos la importación de tarifas y @#! fallaba otra vez.

¿Porqué sería esta vez? Eco, porque el servidor también define un collation por defecto (sí, en Sqlserver 2005 se puede definir el collation para servidor, base de datos y campos dentro de las tablas), desgraciadamente cuando creas uan vista esta coge el collation del servidor no de la base de datos donde la creas y como no el collation del servidor era el contrario al de las bases de datos.

Aquí teníamos un problema mayor, no se puede cambiar el collation del servidor, bueno sí se puede cambiar pero hay que cambiar la master y reconfigurar el servidor. Vaya que no, optamo por algo más lento pero seguro, instalamos una segunda instancia.

Indagando un poco en internet leimos que el collation se configura dependiendo de las opciones de configuración regional, nos decidimos a ahcer una prueba. Probamos a cambiarlas de español internacional (que son al que tenía el equipo) a español tradicional, pero no funcionó se volvió a instalar el servidor como "Modern_Spanish_CI_AS". Así que decidimos hacerlo a las bravas volvimos a instalar el servidor por esta vez habilitando las opciones avanzadas en el proceso de instalación para poder definir manualmente el collation. Simplemente era desmarcar la opción sensitivo a acentos y listo se solucionó.

Etiquetas: