problema para mostrar minusculas mayusculas ignorar especiales cotejamiento caracteres acentos mysql unicode utf-8 collation

para - MySQL Insensible a las mayúsculas pero sensible a los acentos UTF8 clave única



mysql mostrar acentos (2)

Sé que hay muchas preguntas similares sobre SF, pero creo que las mías son lo suficientemente diferentes como para justificar una nueva pregunta. Tengo una tabla que tiene una sola columna como utf8 con utf8_unicode_ci. También tiene una clave única en esta columna junto con otra columna que marca un código de idioma. Los datos en la columna están en muchos guiones diferentes (latín con varios acentos, chino y ruso, entre otros).

El problema es que a veces quiero ingresar dos palabras con diferentes significados que solo difieren por un signo diacrítico (es decir, año español vs año). Como utf8_unicode_ci es insensible tanto a mayúsculas como a minúsculas, piensa que son las mismas y solo me permitirá ingresar una. Eso apesta. Idealmente, cambiaría toda la columna a una intercalación que es sensible a la sensibilidad pero sensible al acento, pero eso no parece existir. Hay muchas cosas diferentes que usan esta columna, por lo que prefiero no cambiar la intercalación predeterminada de la columna a utf8_bin por temor a complicar las cosas con mayúsculas y minúsculas.

Entonces, dicho todo esto, necesito alguna solución que no afecte la sensibilidad de mayúsculas y minúsculas predeterminada en las muchas consultas existentes que llegan a esta columna, pero me permitirá agregar palabras que difieren solo en un signo diacrítico. Ideas? Voy a cambiar solo la restricción de clave única a utf8_bin si es necesario, pero preferiría no, ya que nunca quiero dos cosas en la tabla que difieran solo por caso.


Lo único que puedo pensar (sin encontrar una intercalación que se adapte a tus necesidades) es cambiar algo en la capa de aplicación (fuera de MySQL) que se encargue de la diferenciación.

Por ejemplo, ya que no le importa el caso, puede hacer algo programáticamente para disminuir el caso de todas las filas en la base de datos. A continuación, cambie la intercalación a utf8_bin.

Luego puede, en la aplicación, convertir todo en minúsculas antes de ingresar a la base de datos (supongo que esto no afectará a los caracteres diacríticos). De esta forma, aún obtendrás errores si las personas intentan ingresar a varios casos, solo debes cambiar algunas líneas de código para precondicionar cosas que ingresan a la tabla, y no tendrás el problema diacrítico.


No tiene que reinventar la rueda pinchada (reinventar la rueda) aquí.

Hay dos colaciones en español en MySQL:

utf8_spanish_ci (español moderno) y utf8_spanish2_ci (español tradicional)

Conocen el lenguaje lo suficientemente bien como para saber que N yn deben cotejarse juntos, pero que Ñ y ñ son letras diferentes entre N y O. En español, Ñ es en realidad una letra diferente, no un acento.

Establezca la intercalación de columnas en utf8_spanish_ci y todo funcionará de la manera que desee.