Devo migrar um banco de dados MySQL com um agrupamento latin1_swedish_ci para utf-8 e, em caso afirmativo, como?

votos
7

O banco de dados MySQL usado pelo meu aplicativo Rails tem atualmente o agrupamento padrão do latin1_swedish_ci. Uma vez que o charset padrão de aplicações Rails (incluindo o meu) é UTF-8, parece sensato para mim usar o utf8_general_ciagrupamento no banco de dados.

É o meu pensamento correto?

Assumindo que é, qual seria a melhor abordagem para migrar o agrupamento e todos os dados no banco de dados para a nova codificação?

Publicado 13/10/2008 em 12:16
fonte usuário
Em outras línguas...                            


4 respostas

votos
1

Converter para UTF-8 como o conjunto de caracteres.

configurações de agrupamento são utilizados apenas para triagem e coisas assim. Escolha o agrupamento que a maioria de seus usuários seria de esperar.

Respondeu 13/10/2008 em 15:52
fonte usuário

votos
4

UTF-8, assim como qualquer outro esquema de codificação Unicode, pode armazenar caracteres em qualquer idioma, por isso, é uma excelente opção de página de código para o seu banco de dados.

A configuração de agrupamento, por outro lado, é uma questão completamente separada do esquema de codificação. Trata-se de ordens de classificação, conversões superior / minúsculas, comparações seqüência de igualdade, e coisas assim que são específicos do idioma. A configuração de agrupamento deve corresponder ao idioma que é usado no banco de dados.

O agrupamento geral UTF-8 é (estou assumindo aqui, não estou familiarizado com o MySQL em particular) usado para situações em que a língua é desconhecida e alguns ordenamento padrão simples é necessária. Provavelmente corresponde ao ponto de pedidos de código Unicode, que é quase certamente não o que você quer se você está armazenando sueco.

Respondeu 13/10/2008 em 16:24
fonte usuário

votos
1

Fornecendo seus dados existentes no banco de dados está corretamente codificados em latin1, convertendo as tabelas para utf8 (usando ALTER TABLE, como descrito na documentação) deverá funcionar.

Então todo o seu aplicativo precisa fazer é continuar fazendo o que fazia antes. Se o seu aplicativo quer usar caracteres Unicode, ele deve definir a sua codificação de conexão para utf8 utf8 e uso, mas isso é o seu próprio problema.


O problema é que um grande número de aplicações web porcaria enviou historicamente dados utf8 para mysql e contou a tratá-lo como latin1. MySQL irá honrar isso perfeitamente e salvar lixo em tabelas, como instruído.

Convertendo as tabelas de LATIN1 para utf8 não irá reparar este erro, como você realmente tem total lixo lá dentro. Repará-los não é trivial, principalmente se durante o tempo de vida do aplicativo é falado diferentes tipos de lixo para o banco de dados.

Respondeu 13/10/2008 em 21:14
fonte usuário

votos
0

Use abaixo consulta mysql para converter sua coluna:

ALTER TABLE users MODIFY description VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Para ver todos os detalhes sobre sua mesa:

SHOW FULL COLUMNS FROM users;
Respondeu 26/09/2016 em 11:57
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more