UTF-8 es (generalmente) una codificación "segura" para cualquier juego de caracteres en el mundo. (No siempre es el más eficiente, y hay algunos argumentos para argumentar que Unicode subrepresenta los scripts CJK con su modelo "han unificado", pero seguimos adelante...)
Sin embargo, es probable que su(s) programa(s) de interfaz no se estén traduciendo a/desde UTF-8 correctamente. Por ejemplo, ó => ó parece que los datos UTF-8 (donde un carácter se puede distribuir en un número variable de bytes) se le presentan utilizando una codificación europea de un solo byte, como ISO-8859-15 o MS- CP-1451 o similar.
Usted es probablemente almacenando los datos correctamente, pero cargando incorrectamente. Si solo está usando mysql
programa de terminal o similar, asegúrese de que su terminal esté configurado para usar UTF-8 (en un sistema Unix/Linux, locale
probablemente debería ser algo que termine en .utf8
, p.ej. el mío tiene LANG=en_US.utf8
)
Si está extrayendo datos usando una herramienta GUI o similar, verifique su panel de Configuración/Preferencias para el conjunto de caracteres.
Si está recuperando los caracteres mal traducidos en una aplicación que ha escrito, busque las herramientas de su idioma para configurar la configuración regional. (Tal vez, el INSERT
las rutinas lo hacen bien, pero el SELECT
las rutinas lo tienen mal?)
Y, si esto se envía a la Web, asegúrese de que sus archivos (XML|HTML|XHTML) tengan charset=utf8
declarado en el(los) lugar(es) apropiado(s), o traducir de UTF-8 al conjunto de caracteres de su documento (si es posible) usando algo como iconv
al insertar texto de la base de datos. (La mayoría de los conjuntos de caracteres que no son Unicode solo pueden representar un subconjunto de Unicode, por supuesto; por ejemplo, el conjunto ISO-8859-15 hace un trabajo decente al cubrir los idiomas europeos, pero no es compatible con los sistemas de escritura cirílico, árabe o CJK, por lo que es posible que no se traduzca un carácter). En Perl, puede usar argumentos de paso para open
o usa binmode
para configurar una capa de traducción de conjunto de caracteres transparente en un flujo de "identificador de archivo".