2010-02-18 12 views
0

Pourquoi ne puis-je pas insérer le mot Español via la ligne de commande mysql program? Voir la session ci-dessous.Comment insérer des caractères latins dans Mysql à partir du shell de la ligne de commande?

mysql> select CONCAT('Espa', 0xF1, 'ol'); 
+------------------------------+ 
| CONCAT('Espa', 0xF1, 'ol') | 
+------------------------------+ 
| Español      | 
+------------------------------+ 
1 row in set (0.00 sec) 

mysql> create table t 
    > ( 
    >  nom varchar(25) NOT NULL 
    >) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

mysql> insert into t VALUES(CONCAT('Espa', 0xF1, 'ol')); 
Query OK, 1 row affected, 1 warning (0.02 sec) 

mysql> select * from t; 
+------+ 
| nom | 
+------+ 
| Espa | 
+------+ 
1 row in set (0.00 sec) 

mysql> select HEX(nom) from t; 
+----------+ 
| HEX(nom) | 
+----------+ 
| 45737061 | 
+----------+ 

mysql> show variables like 'char%'; 
+--------------------------+----------------------------+ 
| Variable_name   | Value      | 
+--------------------------+----------------------------+ 
| character_set_client  | utf8      | 
| character_set_connection | utf8      | 
| character_set_database | utf8      | 
| character_set_filesystem | binary      | 
| character_set_results | utf8      | 
| character_set_server  | utf8      | 
| character_set_system  | utf8      | 
| character_sets_dir  | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+ 

Répondre

0

0xf1 n'est pas une séquence UTF-8 valide, donc il étouffe sur cela. Utilisez la séquence UTF-8 appropriée à la place:

$ python -c "print repr('\xf1'.decode('latin-1').encode('utf-8'))" 
'\xc3\xb1' 
+0

Génial. Cela marche. insérer dans t VALUES (CONCAT ('Espa', 0xc3, 0xb1, 'ol')); –

0

Il semble fonctionner avec latin1 comme jeu de caractères par défaut.

+0

Je dois également stocker des caractères chinois, donc je ne peux pas passer en latin1. –

Questions connexes