A colación de la Collation…

Un problema típico trabajando con cadenas y comparaciones es como lidiar con cuestiones de acentos y la diferencia de mayúsculas y minúsculas.

El problema surge de que la computadora guarda los caracteres como (sucesiones de) bytes: así la letra A es un byte 65 o 0x41, la B es 66 o 0x42, la a es 97 o 0x61 y, en la tabla ISO-8859-1 á es 160 o 0xA0. Cuando la computadora compara los bytes A es disntito de a y de á. Esto es extrictamente cierto y necesario, pero hay (muchas) veces en la que es un efecto no deseado.

La solución más común es “normalizar” las cadenas para búsquedas y comparaciones. Para eso hacemos unas funciones muy bonitas que termina metiéndole mano hasta el kiosquero de la esquina.

Este enfoque no es malo, pero en seguida resulta ineficiente, ya que por cada búsqueda o comparación hay que normalizar. Para eso nuestro DBA amigo nos sugirió crear un campo donde podamos guardar nuestra cadena normalizada -pobre tipo, ya tiene bastante lío revirtiendo nuestros accidentes-. Nosotros, codeadores empedernidos sentimos un poco de frustración por guardar dos veces lo que podemos calcular con nuestra superfunción. Pero todo sea en nombre de la concurrencia y el rendimiento.

¿Nadie resolvió esto ya?

¡Sí!

¡Para eso se inventó la Collation de nuestras bases de datos, tablas, o incluso de nuestros campos!

Lo que hace la Collation es establecer un orden alternativo independiente del mapeo de caracteres. Es una secuencia de orden alternativa. No es un algoritmo de ordenación.

De esta manera nuestra base de datos ya nos provee el tratamiento de cadenas con caracteres especiales.

Si quisiéramos aplicar Collation en una base MySQL para un campo con charset utf8 utilizaríamos utf8_spanish_ci.

Si quisiéramos aplicar Collation para un campo con charset iso-8859-1 (latin-1) latin1_spanish_ci.

Se puede leer más y mejor en la documentación de mysql para charset utf-8 y para el caso iso-8859-1.

El tema tiene mucha tela para cortar y dejo esto para empzar. Ya volveremos con algo más interesante.

Saludos y ¡buen año!

Etiquetas: ,

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


A %d blogueros les gusta esto: