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

Usando utf8mb4 com php e mysql


utf8 do MySQL codificação não UTF-8 real. É uma codificação parecida com UTF-8, mas suporta apenas um subconjunto do que o UTF-8 suporta. utf8mb4 é real UTF-8. Essa diferença é um detalhe de implementação interna do MySQL. Ambos se parecem com UTF-8 no lado do PHP. Se você usa utf8 ou utf8mb4 , o PHP obterá UTF-8 válido em ambos os casos.

O que você precisa ter certeza é que a codificação de conexão entre PHP e MySQL está definido como utf8mb4 . Se estiver definido como utf8 , o MySQL não suportará todos os caracteres. Você define esta codificação de conexão usando mysql_set_charset() , o PDO charset Parâmetro de conexão DSN ou qualquer outro método apropriado para sua API de banco de dados de escolha.

mb_internal_encoding apenas define o valor padrão para o $encoding parâmetro todos mb_* funções têm. Não tem nada a ver com o MySQL.

UTF-8 e UTF-32 diferem na forma como codificam os caracteres. UTF-8 usa um mínimo de 1 byte para um caractere e no máximo 4. UTF-32 sempre usa 4 bytes para cada caractere. O UTF-16 usa no mínimo 2 bytes e no máximo 4.
Devido ao seu comprimento variável, o UTF-8 tem um pouco de overhead. Um caractere que pode ser codificado em 2 bytes em UTF-16 pode levar 3 ou 4 em UTF-8; por outro lado, UTF-16 nunca usa menos do que 2 bytes. Se você estiver armazenando muito texto asiático, o UTF-16 poderá usar menos armazenamento. Se a maior parte do seu texto for inglês/ASCII, UTF-8 usará menos armazenamento. UTF-32 sempre usa mais armazenamento.