2015-10-16 111 views
0

我做我的数据库utf8mb4的转换,但它仍然返回不正确的UTF8字符:的Mysql 5.6 UTF8(utf8mb4)仍显示不正确的字符

例如,Café成为Café

这里是我的mysql排序规则变量:

mysql> SHOW VARIABLES LIKE 'char%'; SHOW VARIABLES LIKE 'collation%'; 
+--------------------------+----------------------------+ 
| Variable_name   | Value      | 
+--------------------------+----------------------------+ 
| character_set_client  | utf8mb4     | 
| character_set_connection | utf8mb4     | 
| character_set_database | utf8      | 
| character_set_filesystem | binary      | 
| character_set_results | utf8mb4     | 
| character_set_server  | utf8mb4     | 
| character_set_system  | utf8      | 
| character_sets_dir  | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+ 
8 rows in set (0.00 sec) 

+----------------------+--------------------+ 
| Variable_name  | Value    | 
+----------------------+--------------------+ 
| collation_connection | utf8mb4_unicode_ci | 
| collation_database | utf8_general_ci | 
| collation_server  | utf8mb4_unicode_ci | 
+----------------------+--------------------+ 

另外,自从转换到utf8以来,我的数据库至少减慢了10倍。

回答

1

Mojibake。这是

的一个典型案例
  • 客户端中的字节在utf8mb4(good)中正确编码。
  • 您与SET NAMES latin1(或set_charset('latin1')或...)连接,可能是默认情况下。 (它应该是utf8mb4。)
  • 表中的列可能是也可能不是CHARACTER SET utf8mb4,但应该是这样的。

如果需要修正这些数据需要“2步ALTER”,像

ALTER TABLE Tbl MODIFY COLUMN col VARBINARY(...) ...; 
ALTER TABLE Tbl MODIFY COLUMN col VARCHAR(...) ... CHARACTER SET utf8mb4 ...; 

,其中长度足够大,其他的“...”有其他任何(NOT NULL等)已经在列上。