¿Cuál es la mejor intercalación para usar en MySQL con PHP? [cerrado]
¿Existe algún tipo de intercalación recomendado oficialmente por MySQL para un sitio web general en el que no está 100% seguro de lo que se ingresará? Entiendo que todas las codificaciones deben ser iguales, como MySQL, Apache, HTML y cualquier cosa dentro de PHP.
En el pasado configuré PHP para generar en "UTF-8", pero ¿con qué intercalación coincide esto en MySQL? Estoy pensando que es uno de los UTF-8, pero he usado utf8_unicode_ci
, utf8_general_ci
y utf8_bin
antes, y no sé cuál de estos mapas "utf8" es el mejor para usar.
La principal diferencia es la precisión de clasificación (al comparar caracteres en el idioma) y el rendimiento. El único especial es utf8_bin que sirve para comparar caracteres en formato binario.
utf8_general_ci
es algo más rápido que utf8_unicode_ci
, pero menos preciso (para ordenar). La codificación utf8 del idioma específico (como utf8_swedish_ci
) contiene reglas de idioma adicionales que los hacen más precisos para ordenar esos idiomas. La mayor parte del tiempo lo uso utf8_unicode_ci
(prefiero la precisión a pequeñas mejoras de rendimiento), a menos que tenga una buena razón para preferir un lenguaje específico.
Puede leer más sobre conjuntos de caracteres Unicode específicos en el manual de MySQL: http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-sets.html
En realidad, probablemente quieras usar utf8_unicode_ci
o utf8_general_ci
.
utf8_general_ci
ordena eliminando todos los acentos y ordenando como si fuera ASCIIutf8_unicode_ci
utiliza el orden de clasificación Unicode, por lo que ordena correctamente en más idiomas
Sin embargo, si solo usa esto para almacenar texto en inglés, estos no deberían diferir.