网站运维人员在维护多个站点,除了保证安全之外,最看重应该就是网站数据备份了。不论是远程还是本地通常都会定点备份数据文件,以备站点出现不可逆的问题时及时恢复,将损失控制在最小范围内。而数据库是整个网站的核心。
恢复原站点数据库时出现: MYSQL 返回:#1273-Unknown collation:’utf8mb4_unicode_ci’的错误提示。
如何解决?从字面意思上是没有定义的 编码 集utf8mb4也可以理解是数据库不支持utf8mb4。
度娘告诉我们utf8mb4是utf8的一个衍生形式, utf-8 里的一个字符只能最多支持3个字节,而utf8mb4则扩展到一个字符支持4个字节。而utf8mb4只有在 mysql数据库 版本是5.5.3+的时候才支持。在官方有关于utf8mb4编码的说明,只要在数据库支持的时候才会把部分数据表的编码升级为utf8mb4,如果不支持就不会转化为utf8mb4编码。这就意味着,原站点还是 向下兼容 utf8格式的数据库编码的。
所以我们在导入数据库之前,只需把把utf8mb4编码转成utf-8就可以了,有三种方法可以解决。
一、直接通过代码编辑器替换utf8mb4为utf8_general_ci
在导入数据库之前,用代码编辑器打开需要导入的数据库文件。
1.查找:utf8mb4_unicode_ci,替换为:utf8_general_ci
2.查找:utf8mb4替换为utf8
替换的时候一定要注意顺序,如果先替换utf8mb4,再替换utf8mb4_unicode_ci就会找不到utf8mb4_unicode_ci而造成替换失败。
二、通过SQL语句替换
熟悉SQL语句的朋友也可以直接通过SQL命令修改,通过命令修改的参考如下,有能力的朋友可以尝试使用。
sql命令如下:
mysql_select_db($dbname);
$result=mysql_query(‘show tables’);
while($tables = mysql_fetch_array($result)) {
foreach ($tables as $key => $value) {
mysql_query(“ALTER TABLE $value CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci”);
}}
三、删除config.inc.php文件(小编没有实践过,慎用)
有时候在MYSQL没有安装utf8的字符集,将 phpMyAdmin 目录下的config.inc.php删除掉,也可以解决上述报错问题。
注: 有时是数据库版本的问题,把网站要用的mysql数据库升级到5.5.3以上版本。