Pergunta

Eu realmente preciso mudar de VARCHAR para VARBINARY e TEXT para BLOB para UTF-8 no MySQL e PHP? Ou posso ficar com CHAR / campos de texto no MySQL?

Foi útil?

Solução

Talvez. Como jason apontou e eu não aviso, MySQL UTF-8 se limita a mapear o Plano Multilingual Básico. O manual não apontam no entanto, que "Eles [utf8 e ucs2] são suficientes para quase todos os personagens nas principais línguas" Então, é provavelmente seguro, mas você pode querer verificar o que está no Basic Multilingual Plane só para ter certeza.

Resposta Orignal

Enquanto seu banco de dados está usando UTF-8, você deve ser capaz de ficar com VARCHAR e TEXT. (Como uma nota lado, o MySQL manual do recomenda usando VARCHAR sobre CHAR com UTF-8 para economizar espaço. Como este é o caso, deve ser seguro para uso VARCHAR e TEXT.)

Outras dicas

Não necessariamente. suporte UTF8 do MySQL é limitado a apenas 3 UTF8 byte, que inclui tudo, até e incluindo a Basic Multilingual Plane . É somente se precisar de personagens que estão na faixa de 4 bytes que você precisa para armazenamento de uso BLOB; isso é raro, mas não totalmente incomum. Consulte o artigo da Wikipedia para um resumo do que você vai estar faltando, e decidir se há alguma coisa lá que é um deve ter.

Aqui está uma boa ligação sobre como lidar com UTF-8 em PHP. MySQL faz muito bem com UTF-8 se você definir o direito intercalação. PHP, por outro lado tem muitos problemas.

Claro que é seguro usar VARCHAR para armazenar texto UTF-8 e não VARBINARY é necessário para isso.

VARCHAR é um "caráter de comprimento variável", que vai perfeitamente se adaptar ao número de bytes necessários para armazenar os caracteres de acordo com o CharCode selecionado.

Há também uma razão pela qual o suporte UTF-8 do MySQL é limitado a apenas 3 bytes. Você precisaria mergulhar nas relacionados UTF-8 docs que falam sobre o procedimento de codificação de UTF-8 para entender por que isso é correto.

E por último mas não menos importante: se você não tiver certeza sobre UTF-8, você pode sempre opt-in para UTF-16. No entanto, você ainda estará usando VARCHAR como ele vai perfeitamente se adaptar ao byte de comprimento correto, no entanto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top