如何修复十六进制UTF-8字节字符(在latin1_swedish_ci表中)

时间:2018-01-01 20:06:29

标签: mysql encoding utf-8

我有一个带有UTF-8字节字符的latin1_swedish_ci数据库,显示为%C5%A1,%C4%8D,...

我已经将数据库和表从latin1转换为utf8,但我仍然需要修复UTF-8字节字符。

ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

MySQL默认字符集:

SHOW VARIABLES LIKE  'char%'

character_set_client    utf8mb4 
character_set_connection    utf8mb4 
character_set_database  utf8mb4 
character_set_filesystem    binary  
character_set_results   utf8mb4 
character_set_server    latin1  
character_set_system    utf8    
character_sets_dir  /usr/share/mysql/charsets/  

我尝试了MySQL功能但没有成功:

convert(cast(convert(name using  latin1) as binary) using utf8)

我真的需要帮助!谢谢。

1 个答案:

答案 0 :(得分:1)

您使用的是PHP吗?是否致电urlencode()?唐'吨。仅将该函数用于构建url字符串。

让我们仔细检查表中的SELECT HEX(...) ... - pisarniška应成为(为清晰起见而添加空格):

70697361726E69 C5A1 6B61   if correctly stored as utf8mb4 (or utf8)
70697361726E69 254335 254131 6B61   if urlencoded first