188 votos

¿UTF-8: General? ¿Bin? ¿Unicode?

Estoy tratando de averiguar lo que intercalación que debo utilizar para diversos tipos de datos. el 100% del contenido que se va a almacenar es enviado por el usuario.

Mi entendimiento es que yo debería ser el uso de UTF-8 CI General (no distingue mayúsculas de Minúsculas) en lugar de UTF-8 en Binario. Sin embargo, no puedo encontrar una clara distinción entre UTF-8 General de CI y UTF-8 Unicode CI.

  1. Debo almacenar contenido enviado por el usuario en UTF-8 General o UTF-8 Unicode CI columnas?
  2. ¿Qué tipo de datos UTF-8 Binarios ser aplicable a?

222voto

Sagi Puntos 5590

En general, utf8_general_ci es más rápido que utf8_unicode_ci, pero menos correcto.

Aquí está la diferencia:

Para cualquier conjunto de caracteres Unicode, las operaciones realizadas usando el _general_ci intercalación son más rápidos que los de la _unicode_ci de intercalación. Por ejemplo, las comparaciones de la utf8_general_ci intercalación son más rápidos, pero un poco menos correcta, que las comparaciones para utf8_unicode_ci. La razón de esto es que utf8_unicode_ci admite asignaciones tales como la ampliación; es decir, cuando un personaje se compara como equivalente a las combinaciones de los otros personajes. Por ejemplo, en alemán y otros idiomas "ß" es igual a "ss". utf8_unicode_ci también admite contracciones y ignorable caracteres. utf8_general_ci es un legado de intercalación que no admite expansiones, contracciones, o ignorables caracteres. Se puede hacer sólo uno-a-uno comparaciones entre los personajes.

Cita de: http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-sets.html

Para una explicación más detallada, por favor lea el siguiente post de MySQL en foros: http://forums.mysql.com/read.php?103,187048,188748

Como para utf8_bin: Ambos utf8_general_ci y utf8_unicode_ci realizar insensibles a mayúsculas / minúsculas de comparación. En contraste, utf8_bin es sensible a mayúsculas (entre otras diferencias), ya que compara los valores binarios de los personajes.

68voto

Alex Hepp Puntos 561

Usted también debe ser conscientes del hecho, de que con utf8_general_ci cuando se utiliza un campo varchar como único o principal Índice Introducción 2 valores como 'a' y 'á' daría un error de clave duplicado.

3voto

user2635057 Puntos 19

Realmente, he probado guardar valores como 'é' y 'e' y causar error duplicado en ambos 'utf8_unicode_ci' y 'utf8_general_ci'. Puede guardarlas solamente en la columna de 'utf8_bin' intercalado.

Y mysql docs (en http://dev.mysql.com/doc/refman/5.7/en/charset-applications.html) sugieren en su conjunto de ejemplos 'utf8_general_ci' colación.

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: