No distinguir caso ni acentos en SQL Server

Tal vez en alguna ocasión, necesites realizar una consulta a una base de datos SQL Server, comparando un campo de texto con un valor, pero sin tener en cuenta mayúsculas y minúsculas; o bien sin diferenciar entre vocales acentuadas de sin acentuar.

La solución es tremendamente sencilla, aunque no intuitiva ni fácil de descubrir. Se trata de utilizar la cláusula COLLATE, para forzar a SQL Server a que use las transformaciones de caracteres (intercalaciones en la traducción del MSDN) que nos interesen.

El truco está en que COLLATE, no solamente permite especificar juegos de caracteres (Modern_Spanish, Latin1_General, …), sino además agregar reglas que indican como tratar esa expresión. Entre las reglas están CI o CS (Case Ignore o Case Sensitive), y AI o AS (Accent Ignore o Accent Sensitive).

Así podríamos definir la collation Modern_Spanish_CS_AI, que utiliza juego de caractéres español, diferenciando mayúsculas de minúsculas, pero sin diferenciar acentos.

Un ejemplo más claro de esto, sería la típica consulta SQL para buscar en una base de datos de libros, sin tener en cuenta la capitalización, ni la acentuación:

SELECT
*
FROM
t_mstr_libro
WHERE
libro_autor + ' ' +
libro_titulo + ' ' +
libro_texto
LIKE
'%TEXTO A BUSCAR%'
COLLATE Modern_Spanish_CI_AI

La query, busca en la tabla maestra de libros, y concatena los campos sobre los que queremos buscar (autor, título y texto), aplicando el operador de comparación LIKE contra las búsqueda que nos interesa. En ese caso es "TEXTO A BUSCAR". La expresión se complementa forzando el COLLATE a español moderno, sin diferenciar capitalización (CI) ni acentuación (AI).


No distinguir caso ni acentos en SQL Server

10 comentarios en “No distinguir caso ni acentos en SQL Server”

  1. Amigo yo tengo este problema, en mi aplicativo lanzo una consulta y pregunto por una descripción la cual tiene tilde. En unas maquinas si me funciona pero en otras no.he realizado un trace a la bd y observo que las maquinas donde no me funciona la consulta el carácter con tilde me lo remplaza con basura 3/4 así me cambia la letra ó.
    Quiero saber por que en unas maquinas si me interpreta bien la tilde y en otras no. Gracias de antemano

  2. Javier Gutiérrez Chamorro (Guti)

    Parece un problema de codificación de la tabla Arturo, que en algunas máquinas la tengas como UTF8, y en otras no.

  3. Pero mi bd esta en un servidor en sal 2008, y todos los clientes acceden a ella, el problema es en algunas maquinas que no me lee correctente la tilde y lo interpreta como basura. Osea que puede faltarle a la maquina, que configuración que no accede bien y otras si.

  4. Javier Gutiérrez Chamorro (Guti)

    En ese caso, parece que el problema no está en el servidor, sino en los clientes que conectan, por ello algunos funcionan bien, y otros no. Habría que tener más información al respecto Arturo Torres.

    ¿Cómo conectan esas máquinas al SQL Server 2008? Lo hacen directamente, o desde un programa cliente que efectúa la conexión.

    ¿Tienen la misma versión de drivers?

  5. Lo hacen a traves de un aplicativo cliente, que es el mismo que esta instaldo en una y otra maquina por lo que creo que el problema va por el lado de la configuracion de la maquina cliente, alguna configuracion pero no se que podria ser. Muchas gracias

  6. Javier Gutiérrez Chamorro (Guti)

    Si la aplicación conecta por ODBC, revisa las versiones de los drivers, y la configuración de los mismos.

  7. Javier Gutiérrez Chamorro (Guti)

    Bienvenido Roberto, y gracias a ti por la confirmación. Hace tiempo que no uso SQL Server, pero me llama la atención que desde 2007 que lo escribí, hace más de 13 años, no haya aparecido una forma más sencilla o intuitiva de hacerlo.

Deja un comentario