mysql search diacritics

Consulta de búsqueda insensible al acento en MySQL



search diacritics (3)

¿Hay alguna manera de hacer que la consulta de búsqueda sea insensible?

La intercalación de la columna y la tabla son utf8_polish_ci y no quiero cambiarlos.

palabra de ejemplo: toruń

select * from pages where title like ''%torun%''

No encuentra "toruń". ¿Cómo puedo hacer eso?


Esto no funcionará en circunstancias extremas, pero intente cambiar la intercalación de columnas a UFT8 utf8_unicode_ci . Entonces, los caracteres acentuados serán iguales a sus homólogos no acentuados.


Puede cambiar la intercalación en el tiempo de ejecución en la consulta de SQL,

...where title like ''%torun%'' collate utf8_general_ci

pero tenga en cuenta que cambiar la intercalación sobre la marcha en el tiempo de ejecución deja de lado la posibilidad de que mysql use un índice, por lo que el rendimiento en tablas grandes puede ser terrible.

O bien, puede copiar la columna a otra columna, como searchable_title , pero cambiar la intercalación en ella. En realidad, es común hacer este tipo de cosas, donde se copian los datos pero se tienen formas ligeramente diferentes que están optimizadas para alguna carga de trabajo / propósito específico. Puede usar los activadores como una buena forma de mantener sincronizadas las columnas duplicadas. Este método tiene el potencial de funcionar bien, si se indexa.

Nota: asegúrese de que su db realmente tenga esos caracteres y no entidades html. Además, el conjunto de caracteres de su conexión es importante. Lo anterior asume que está establecido en utf8, por ejemplo, a través de nombres de set names utf8 como los set names utf8

Si no, necesita un introducer para el valor literal

...where title like _utf8''%torun%'' collate utf8_general_ci

y, por supuesto, el valor en las comillas simples debe estar realmente codificado en utf8, incluso si el resto de la consulta SQL no lo está.