Как да вмъкна латински символи в Mysql от обвивката на командния ред?

Защо не мога да вмъкна думата Español чрез програмата mysql от командния ред? Вижте сесията по-долу.

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/ |
+--------------------------+----------------------------+

person Jacques René Mesrine    schedule 18.02.2010    source източник


Отговори (2)


0xf1 не е валидна UTF-8 последователност, така че се задушава от това. Вместо това използвайте правилната UTF-8 последователност:

$ python -c "print repr('\xf1'.decode('latin-1').encode('utf-8'))"
'\xc3\xb1'
person Ignacio Vazquez-Abrams    schedule 18.02.2010
comment
Страхотен. Това работи. вмъкнете в t VALUES( CONCAT('Espa', 0xc3, 0xb1, 'ol' ) ); - person Jacques René Mesrine; 18.02.2010

Изглежда, че работи с latin1 като набор от знаци по подразбиране.

person Community    schedule 18.02.2010
comment
Трябва да съхраня и китайски йероглифи, така че не мога да превключа на latin1. - person Jacques René Mesrine; 18.02.2010