A la hora de crear campos en una tabla, se puede definir el collation (cotejamiento) a nivel de tabla o al nivel de campo. Debemos tener en cuenta el collate que elegimos, ya que básicamente, de esto depende el juego de caracteres utilizado y más importante aún, como realizará las búsquedas tanto con LIKE, como en comparación exacta de cadenas (con “=”).
Por defecto, el sistema creará tablas y campos de tipo de cadena con un collation utf8_general_ci, puesto que es el que se ha definido en el servidor por defecto. El ci, significa “Case Insensitive”, es decir que le da igual mayúsculas que minúsculas.
Si el collation es utf8_general_ci al buscar, será menos restrictivo. Es decir, no diferenciará una n de una ñ.
Si el collation es utf8_spanish_ci al buscar, será un poco más restrictivo. Es decir, si diferenciará una n de una ñ, pero no entre á y a o a de A.
Si el collation es utf_bin al buscar, será estricto. Es decir, si diferenciará una á de a o a de A.
Si a pesar de todo, la tabla ya tiene un campo definido con un collation y queremos realizar una búsqueda, pero de modo más o menos restrictivo, podemos emplear una clausula collate en la búsqueda, independientemente de cómo esté definida:
“Select * from tabla where apellido like ‘%Caño%’ collate Utf8_general_ci”,
Nos devolverá ñ, n, Ñ y N
Fernando Caño
JOSE CAÑO
Jose Luis Cano
ANTONIO LIZCANO
“Select * from tabla where apellido like ‘%Caño%’ collate Utf8_spanish_ci”,
Nos devolverá Ñ y ñ
Fernando Caño
JOSE CAÑO
“Select * from tabla where apellido like ‘%Caño%’ collate Utf8_bin”,
Nos devolverá
Fernando Caño
Mediante este método no hará caso al collation que tenga definido el campo. Ahora bien, si no añadimos el collate en la cláusula sql, en la búsqueda se aplicará el collation con el que esté definido el campo, y no tiene ninguno, el que tenga definida la tabla.