查看mysql的用户手册能发现,mysql进行字符编码转换的步骤很明确:
1. MySQL Server收到请求时将请求数据从character_set_client转换为character_set_connection;
2. 进行内部操作前将请求数据从character_set_connection转换为内部操作字符集,其确定方法如下:
使用每个数据字段的CHARACTER SET设定值;
若上述值不存在,则使用对应数据表的DEFAULT CHARACTER SET设定值(MySQL扩展,非SQL标准);
若上述值不存在,则使用对应数据库的DEFAULT CHARACTER SET设定值;
若上述值不存在,则使用character_set_server设定值。
3. 将操作结果从内部操作字符集转换为character_set_results。
另外测试发现:
在设置连接字符集的时候,用mysql_set_character_set函数有时会失败,
原因还没深究,估计是MYSQL连接库版本过旧。
其实只要直接执行 set names utf8mb4; 就可以了.
//if (0==mysql_set_character_set(handle, "utf8mb4")) {
// printf("New client character set: %sn", mysql_character_set_name(handle));
//} else {
// printf(" %sn", mysql_error(handle));
//}
//
int nRet = mysql_query(handle, "set names utf8mb4;");
if(nRet!=0)
{
printf("%sn", mysql_error(handle));
}
http://mathiasbynens.be/notes/mysql-utf8mb4#character-sets
http://dev.mysql.com/doc/refman/5.5/en/charset-unicode-upgrading.html
http://www.cnblogs.com/end/archive/2011/04/01/2002517.html
转载请注明:爱开源 » MySQL utf8mb4问题