#1273 - 未知校对:'utf8mb4_unicode_ci'cPanel

时间:2015-04-28 10:16:56

标签: mysql wordpress phpmyadmin cpanel

我的本​​地计算机上有一个WordPress数据库,我希望将其转移到cPanel上的托管phpMyAdmin。但是,当我尝试将数据库导入环境时,我不断收到此错误:

#1273 - Unknown collation: 'utf8mb4_unicode_ci' 

我试过谷歌,我能找到的唯一解决方案就是这个phpmysql error - #1273 - #1273 - Unknown collation: 'utf8mb4_general_ci',现在已经没有太多帮助了。我已经尝试清除cookie但它仍然无法正常工作。请帮忙!

13 个答案:

答案 0 :(得分:128)

最好的办法是将数据库导出到.sql,在Notepad ++上打开它,然后转到“搜索和替换”。然后你在搜索时加上“utf8mb4”,在替换时加上“utf8”。它会将 utf8mb4_unicode_ci 替换为 utf8_unicode_ci 。现在转到PhpMyAdmin(目标)并将数据库排序规则设置为utf8_unicode_ci(操作>排序规则)。

答案 1 :(得分:100)

我遇到了与所有服务器运行旧版MySQL相同的问题。这可以通过运行PHP脚本来解决。将此代码保存到文件并运行它输入数据库名称,用户和密码,然后将排序从utf8mb4/utf8mb4_unicode_ci更改为utf8/utf8_general_ci

<!DOCTYPE html>
<html>
<head>
  <title>DB-Convert</title>
  <style>
    body { font-family:"Courier New", Courier, monospace; }
  </style>
</head>
<body>

<h1>Convert your Database to utf8_general_ci!</h1>

<form action="db-convert.php" method="post">
  dbname: <input type="text" name="dbname"><br>
  dbuser: <input type="text" name="dbuser"><br>
  dbpass: <input type="text" name="dbpassword"><br>
  <input type="submit">
</form>

</body>
</html>
<?php
if ($_POST) {
  $dbname = $_POST['dbname'];
  $dbuser = $_POST['dbuser'];
  $dbpassword = $_POST['dbpassword'];

  $con = mysql_connect('localhost',$dbuser,$dbpassword);
  if(!$con) { echo "Cannot connect to the database ";die();}
  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");
     }}
  echo "<script>alert('The collation of your database has been successfully changed!');</script>";
}

?>

答案 2 :(得分:36)

我在linux中使用它:

Download and Display

然后恢复your_file.sql

sed -i 's/utf8mb4/utf8/g' your_file.sql
sed -i 's/utf8_unicode_ci/utf8_general_ci/g' your_file.sql
sed -i 's/utf8_unicode_520_ci/utf8_general_ci/g' your_file.sql

答案 3 :(得分:27)

Wordpress 4.2引入了对security reasons的“utf8mb4”字符编码的支持,但只有MySQL 5.5.3及更高版本支持它。安装程序(和更新程序)处理此问题的方式是它检查您的MySQL版本,并且只有在支持的情况下,您的数据库才会升级到utfmb4

这在理论上听起来很棒,但问题(正如您所发现的)是将数据库从支持utf8mb4的MySQL服务器迁移到不支持utf8mb4的MySQL服务器。虽然反过来应该有效,但它基本上是一种单向操作。

正如Evster所指出的那样,可能使用PHPMYAdmin的“导出”功能获得成功。使用“导出方法:自定义”和“数据库系统或旧版MySQL服务器以最大化输出兼容性:”下拉列表选择“ MYSQL 40

使用mysqldump进行命令行导出。看看旗帜:

$ mysqldump --compatible=mysql4

注意:如果数据库中有任何4字节字符,它们将被破坏。

最后,对于使用流行的WP Migrate DB PRO插件的任何人,a user in this Wordpress.org thread报告迁移始终处理正常,但我无法找到任何正式的。

  

WP Migrate DB插件将数据库从一个排序规则转换为另一个排序规则,当它在5.5.3 MySQL之前或之后的主机之间移动4.2个站点时

此时,似乎没有办法退出数据库更新。因此,如果您正在使用从中迁移网站的工作流程 MySQL的服务器或本地主机&gt; 5.5.3使用较旧的MySQL版本的那个你可能会运气不好。

答案 4 :(得分:24)

在我的情况下,结果是我的 新服务器正在运行MySQL 5.5
旧服务器正在运行MySQL 5.6 因此,在尝试导入从旧服务器导出的.sql文件时出现此错误。

MySQL 5.5不支持utf8mb4_unicode_520_ci,但是支持 MySQL 5.6可以。

在新服务器上更新到MySQL 5.6解决了整理错误!

如果你想保留MySQL 5.5,你可以:
- 制作导出的.sql文件的副本
- 替换utf8mb4unicode520_ciutf8mb4_unicode_520_ci的实例 ...... utf8mb4_unicode_ci - 导入更新的.sql文件。

答案 5 :(得分:15)

wp-config.php中有一行:

<div class="panel-group">
    <div class="panel-heading">
        <h4 class="panel-title">
            <a href="#category" data-toggle="collapse" data-parent="#difcategory">
                <span class="icon-caret-right"></span><span class="icon-caret-down"></span> Title 
            </a>
        </h4>
    </div>
    <div id="category" class="panel-collapse collapse">
        <div class="panel-body">Accordion info</div><!-- end panel-body -->
    </div><!-- end panel-collapse collapse -->
</div><!-- end panel-group -->

.panel-title a .icon-caret-right
{
    display: block;
}
.panel-title a .icon-caret-down
{
    display: none;
}
.panel-title a.collapsed .icon-caret-right
{
    display: none;
}
.panel-title a.collapsed .icon-caret-down
{
    display: block;
}

如果您按照Markouver's / Evster's说明操作,请不要忘记将生产服务器上的此行更改为

define('DB_CHARSET', 'utf8mb4');

以修复损坏的4字节字符

答案 6 :(得分:9)

经过长时间的研究,我找到了上述解决方案:

  1. 首先更改wp-config.php&gt;数据库DB_CHARSET默认 到&#34; utf8&#34;

  2. 点击&#34;导出&#34;数据库的选项卡

  3. 点击&#34;自定义&#34;单选按钮

  4. 转到标题为&#34;格式特定选项&#34;并改变     数据库系统或旧MySQL服务器的下拉列表最大化     输出兼容性:&#34;从NONE到MYSQL40。

  5. 滚动到底部,然后点击转到

  6. 然后你就开始了。

答案 7 :(得分:7)

好像您的主机没有提供能够使用utf8mb4排序规则运行表的MySQL版本。

WordPress表更改为utf8mb4版本4.2(2015年4月23日发布)以支持Emojis,但you need MySQL 5.5.3 to use it. 5.5.3。从2010年3月开始,通常应广泛使用。 Cna你检查你的托管服务商是否提供该版本?

如果没有,并且无法进行升级,您可能需要注意另一个主机运行最新的WordPress版本(出于安全原因,您应该始终这样做。)

答案 8 :(得分:2)

所以我用这种方式解决了,从MySQL 5.6到MySQL 5.5:

'<div ng-if="row.entity.advanced">'

(可选)创建$ mysqldump -u username -p --compatible=mysql4 database_name > database_name.sql $ sed -i 's/TYPE=InnoDB/ENGINE=InnoDB/g' database_name.sql 文件:

.sql.gz

说明

$ gzip database_name.sql 

正如本answer中所解释的,这只是phpMyAdmin中的这些选项的等价物:&#34;数据库系统或较旧的MySQL服务器,以最大化输出兼容性:&#34;下拉选择&#34; MYSQL 40&#34;

$ mysqldump -u username -p --compatible=mysql4 database_name > database_name.sql

我们需要这个来解决这个问题:

  

第18行的错误1064(42000):您的SQL语法出错;检查与您的MySQL服务器版本相对应的手册,以便在#&quot; TYPE = InnoDB&#39;附近使用正确的语法。在第9行

答案 9 :(得分:1)

我也遇到过这个问题。对我有用的解决方案是使用Sequel Pro打开本地数据库,并在导入之前为每个表更新Encoding and Collation到utf8 / utf8_bin。

答案 10 :(得分:1)

The easiest way to do is export your database to .sql, open it on Notepad++ and "Search and Replace" the utf8mb4_unicode_ci to utf8_unicode_ci and also replace utf8mb4 to utf8. Also don't forget to change the database collation to utf8_unicode_ci (Operations > Collation).

答案 11 :(得分:0)

在Notepad ++和ctrl + H.上打开sql文件 然后你把&#34; utf8mb4&#34;在搜索和&#34; utf8&#34;在替换。 那么问题将得到解决。

答案 12 :(得分:0)

如果您使用的是 PHP7,那么您需要一个像这样的 PHP 脚本来迁移您的排序规则:

<!DOCTYPE html>
<html>
<head>
  <title>DB-Convert</title>
  <style>
    body { font-family:"Courier New", Courier, monospace; }
  </style>
</head>
<body>

<h1>Convert your Database to utf8_general_ci!</h1>

<form action="db-convert.php" method="post">
  dbname: <input type="text" name="dbname"><br>
  dbuser: <input type="text" name="dbuser"><br>
  dbpass: <input type="text" name="dbpassword"><br>
  <input type="submit">
</form>

</body>
</html>
<?php
if ($_POST) {
  $dbname = $_POST['dbname'];
  $dbuser = $_POST['dbuser'];
  $dbpassword = $_POST['dbpassword'];

  $mysqli = new mysqli('db',$dbuser,$dbpassword);
  if ($mysqli -> connect_errno) {
    echo "Failed to connect to MySQL: " . $mysqli -> connect_error;
    exit();
  }
  $mysqli -> select_db($dbname);
  $result= $mysqli->query('show tables');
  while($tables = $result->fetch_array) {
          foreach ($tables as $key => $value) {
           $mysqli->query("ALTER TABLE $value CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci");
     }}
  echo "<script>alert('The collation of your database has been successfully changed!');</script>";
}

?>