Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

como armazenar acentos sobre caracteres no meu banco de dados


UTF-8 é (geralmente) uma codificação “segura” para qualquer conjunto de caracteres no mundo. (Nem sempre o mais eficiente, e há alguns argumentos a serem feitos de que o Unicode sub-representa os scripts CJK com seu modelo “han unificado”, mas seguindo em frente…)

No entanto, é provável que seus programas de interface não estejam traduzindo de/para UTF-8 corretamente. Por exemplo, ó => ó parece que os dados UTF-8 (onde um caractere pode ser espalhado por um número variável de bytes) estão sendo apresentados a você usando uma codificação europeia de byte único, como ISO-8859-15 ou MS- CP-1451 ou similar.

Você está provavelmente armazenando os dados corretamente, mas carregando isso incorretamente. Se você está apenas usando o mysql programa de terminal ou similar, certifique-se de que seu terminal esteja configurado para usar UTF-8 (em um sistema Unix/Linux, locale provavelmente deve ser algo terminando em .utf8 , por exemplo. o meu tem LANG=en_US.utf8 )

Se você estiver extraindo dados usando uma ferramenta GUI ou similar, verifique seu painel Configurações/Preferências para o conjunto de caracteres.

Se você estiver recebendo os caracteres mal traduzidos de volta em um aplicativo que você escreveu, consulte as ferramentas do seu idioma para definir a localidade. (Talvez, o INSERT rotinas estão corretas, mas o SELECT rotinas tem errado?)

E, se isso estiver sendo enviado para a Web, certifique-se de que seus arquivos (XML|HTML|XHTML) tenham charset=utf8 declarados no(s) local(is) apropriado(s), ou traduza de volta de UTF-8 para o conjunto de caracteres do seu documento (se possível) usando algo como iconv ao inserir texto do banco de dados. (A maioria dos conjuntos de caracteres não Unicode pode representar apenas um subconjunto de Unicode, é claro; por exemplo, o conjunto ISO-8859-15 faz um trabalho decente ao cobrir os idiomas europeus, mas não tem suporte para sistemas de escrita cirílico, árabe ou CJK, então é possível não traduzir um caractere.) Em Perl, você pode usar argumentos de passagem para open ou use binmode para configurar uma camada de tradução de conjunto de caracteres transparente em um fluxo "filehandle".