Importar dados UTF8 para o MySQL de um arquivo causa truncamento

1

Eu tenho um arquivo chamado person.sql com 1 linha:

INSERT INTO Person (sFullname) VALUES ('Thomas Ågren');

Se eu executar o seguinte comando no shell:

mysql --default-character-set=utf8 -uusername -ppassword mydatabase < person.sql

Eu recebo resultados truncados:

mysql> select sfullname from person;
+-----------+
| sfullname |
+-----------+
| Thomas    |
+-----------+

Se eu executar o comando de inserção mesmo exato diretamente da linha de comando do MySQL:

mysql> INSERT INTO Person (sFullname) VALUES ('Thomas Ågren');

Eu obtenho os resultados corretos:

mysql> select sfullname from person;
+--------------+
| sfullname    |
+--------------+
| Thomas Ågren |
+--------------+

Alguma ideia? O conjunto de caracteres padrão no banco de dados e a tabela Pessoa estão configurados corretamente para utf8. Aqui está a definição do esquema:

mysql> show create table person \G
*************************** 1. row ***************************
       Table: person
Create Table: CREATE TABLE 'person' (
  'sFullname' varchar(50) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
    
por Rob Sobers 22.09.2010 / 19:57

1 resposta

2

Acontece que o arquivo de texto person.sql não era codificado em UTF-8 (embora parecesse ser). Na verdade, era latin1 ( ISO 8859-1 ).

Para mudar as codificações, eu corri:

iconv -f latin1 -t utf-8 person.sql person-utf8.sql

Depois disso, consegui importar com êxito sem truncamento.

    
por 24.09.2010 / 16:58