Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 1273-未知排序规则:“utf8mb4\u unicode\u ci”cPanel_Mysql_Wordpress_Phpmyadmin_Cpanel - Fatal编程技术网

Mysql 1273-未知排序规则:“utf8mb4\u unicode\u ci”cPanel

Mysql 1273-未知排序规则:“utf8mb4\u unicode\u ci”cPanel,mysql,wordpress,phpmyadmin,cpanel,Mysql,Wordpress,Phpmyadmin,Cpanel,我在本地机器上有一个WordPress数据库,我想将它传输到cPanel上的托管phpMyAdmin。但是,当我尝试将数据库导入到环境中时,我不断遇到以下错误: #1273 - Unknown collation: 'utf8mb4_unicode_ci' 我已经试着用谷歌搜索了一下,我能找到的唯一解决办法就是这一个,但到目前为止帮不了什么忙。我试过清理饼干,但还是不行。请帮忙 您的主机似乎没有提供能够使用utf8mb4排序规则运行表的MySQL版本 WordPress表格更改为utf8mb

我在本地机器上有一个WordPress数据库,我想将它传输到cPanel上的托管phpMyAdmin。但是,当我尝试将数据库导入到环境中时,我不断遇到以下错误:

#1273 - Unknown collation: 'utf8mb4_unicode_ci' 

我已经试着用谷歌搜索了一下,我能找到的唯一解决办法就是这一个,但到目前为止帮不了什么忙。我试过清理饼干,但还是不行。请帮忙

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

WordPress表格更改为utf8mb4,版本4.2于2015年4月23日发布,以支持Emojis,但不支持5.5.3。是从2010年3月开始的,所以通常应该可以广泛使用。Cna您是否检查您的主持人是否提供该版本


如果没有,并且无法升级,您可能需要寻找其他主机来运行最新的WordPress版本,出于安全原因,您应该始终这样做。

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

我遇到了同样的问题,因为我们所有的服务器都运行较旧版本的MySQL。这可以通过运行PHP脚本来解决。将此代码保存到一个文件中,输入数据库名称、用户和密码后运行,它会将排序规则从utf8mb4/utf8mb4\u unicode\u ci更改为utf8/utf8\u general\u ci

分贝转换 正文{字体系列:Courier New、Courier、monospace;} 将您的数据库转换为utf8\u general\u ci! 数据库名: 数据库用户: dbpass: 1单击数据库的“导出”选项卡

2单击自定义单选按钮

3转到“格式特定选项”一节,更改数据库系统或旧版MySQL服务器的下拉列表,以最大限度地提高与以下内容的输出兼容性:从无到MYSQL40

4滚动到底部,然后单击GO

我不确定这样做是否会导致任何数据丢失,但是在我尝试过的一次中,我没有注意到任何数据丢失。也没有任何人在上面链接的论坛上回应


编辑8/12/16-我相信以这种方式导出数据库会导致丢失保存在小部件中的数据,尽管我还没有运行多个测试来确认。

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

这在理论上听起来不错,但您发现的问题是,当您将数据库从支持utf8mb4的MySQL服务器迁移到不支持utf8mb4的服务器时。虽然另一种方法应该有效,但它基本上是单向操作

正如Evster所指出的,使用PHPMYAdmin的导出功能可能会成功。对于数据库系统或较旧的MySQL服务器,使用Export-Method:Custom和,以最大限度地提高输出兼容性:下拉选择MySQL 40

用于使用mysqldump的命令行导出。看看国旗:

$ mysqldump --compatible=mysql4
注意:如果数据库中有任何4字节字符,它们将被损坏

最后,对于任何使用流行的WP Migrate DB PRO插件的人来说,报告说迁移总是得到正确处理,但我找不到任何官方信息

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

此时,似乎没有退出数据库更新的方法。因此,如果您使用的是从中迁移站点的工作流
MySQL>5.5.3的服务器或本地主机与使用较旧MySQL版本的服务器或本地主机相比,您可能运气不佳。

wp-config.php中有一行:

define('DB_CHARSET', 'utf8mb4');
如果您按照/说明操作,请不要忘记将生产服务器上的此行更改为

define('DB_CHARSET', 'utf8');

如果您已经导出了.sql文件,要修复断开的4字节字符,最好的方法是查找并替换文件中的以下字符:

utf8mb4_0900_ai_ci到utf8_unicode_ci utf8mb4至utf8 utf8_unicode_520_ci到utf8_unicode_ci 它将utf8mb4_unicode_ci替换为utf8_unicode_ci。现在转到phpMyAdmin cPanel,通过操作>排序将DB排序规则设置为utf8\u unicode\u ci


如果要导出到.sql,最好更改导出文件的格式。查看与此相同的页面经过长时间的研究,我找到了上述问题的解决方案:

首先更改wp config.php>数据库DB_字符集默认值 到utf8

单击数据库的“导出”选项卡

单击“自定义”单选按钮

转到标题为“格式特定选项”的部分,然后更改 用于数据库系统或较旧的MySQL服务器的下拉列表,以最大化 输出兼容性:从无到MYSQL40

滚动到底部,然后单击go

那你就开始了。

最简单的方法
要做的是将数据库导出到.sql,在记事本++上打开它,搜索并将utf8mb4_unicode_ci替换为utf8_unicode_ci,同时将utf8mb4替换为utf8。另外,不要忘记将数据库排序规则更改为utf8_unicode_ci Operations>collation。

因此我用这种方式解决了从MySQL 5.6到MySQL 5.5的问题:

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

解释 正如本文所解释的,这与phpMyAdmin:Database system或旧版MySQL服务器的此选项等效,以最大限度地提高与以下内容的输出兼容性:下拉选择MySQL 40

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

第18行出现错误1064 42000:SQL语法有错误;查看与MySQL服务器版本对应的手册,以了解第9行“TYPE=InnoDB”附近使用的正确语法

就我而言,结果是我的 新服务器运行的是MySQL 5.5, 旧服务器运行的是MySQL 5.6。 因此,我在尝试导入从旧服务器导出的.sql文件时出错

MySQL 5.5不支持utf8mb4_unicode_520_ci,但 MySQL 5.6确实如此

在新服务器上更新到MySQL 5.6解决了排序错误

如果您想保留MySQL 5.5,您可以: -制作导出的.sql文件的副本 -替换UTF8MB4Unicode 520_ci和utf8mb4_unicode_520_ci的实例 …使用utf8mb4\u unicode\u ci -导入更新的.sql文件。

我在linux中使用此文件:

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
sed -i 's/utf8_0900_ai_ci/utf8_general_ci/g' your_file.sql
然后恢复_file.sql

mysql -u yourdBUser -p yourdBPasswd yourdB < your_file.sql

在记事本++和ctrl+H上打开sql文件。 然后将utf8mb4置于搜索位置,将utf8置于替换位置。
这个问题将得到解决。

如果您使用的是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>";
}

?>


您可以通过命令行使用MySQL检查您的MySQL版本-Vdidn不适用于我,我遇到了错误1231-变量“character\u set\u client”无法设置为“NULL”值在多次尝试其他解决方案失败后,此解决方案在第一次尝试时运行良好。对于一些新的Wordpress站点不起作用。在另一台服务器上导入时,它会在尝试导入wp_commentmeta 1064的第一个表上生成此错误-您的SQL语法有错误;查看与MySQL服务器版本对应的手册,了解第19行“TYPE=MyISAM AUTO_INCREMENT=1”附近使用的正确语法。这似乎对我没有任何影响,仍然收到相同的错误消息您对MYSQL 40的bossChanging兼容性完全适用于我。如果您随后尝试将mysql4兼容转储导入到我使用的5.5.28版本的post v5.5.3数据库中,那么它将失败,因为脚本包含在v5.1中删除的TYPE=MyISAM。执行搜索并替换为ENGINE=MyISAM。我看不到使用mysqldump输出选项来解决这个问题的方法。这似乎是对mysqldump-compatible=mysql4的过度杀戮,对我来说,它起作用了。记住将文件命名为db-convert.phpIf,如果您将“localhost”作为输入,那么它就是完美的。mysqldump-compatible=mysql4或者下面的答案是更好的选择。我认为在一个实时站点上改变这样的东西不是一个明智的想法。最好以正确的格式导出,或者如果没有,请编辑导出的文件。因此,您刚刚救了我的命,我能给您的是rn+1。对于所有unix人员来说,它与此一起工作得非常好:sed-I.bak s/utf8mb4/utf8/g file\u NAME。这将在文件_NAME中查找所有出现的utf8mb4,并将其替换为utf8,同时将原始文件的副本保存到文件_NAME.bak。在您的情况下,您可能需要调整它以指定确切的联盟,但这是一个开始:我还必须通过vi:vi dump.sql将:utf8_unicode_520_cio替换为:utf8_unicode_ciOr,然后在via中执行此操作::%s/uf8mb4/utf8/g。并将utf8_0900_ai_ci替换为utf8_unicode_ci,特别是不要忘记修改define'DB_COLLATE'、'utf8_general_ci';也这对我很有帮助。请注意,如果您使用的是OSX版本的sed:$sed-i's/TYPE=InnoDB/ENGINE=InnoDB/g'database_name.sql。如果您想在sed替换之前保留一个副本作为database_name.sql.bak:$sed-i'bak''s/TYPE=InnoDB/ENGINE=InnoDB/g'database_name.sql,您也可以内联sed。此外,如果您在MySQL 8上运行mysqldump,您需要使用-compatible=ansi选项这里有一条关于另一个答案的注释,值得在此重复。OSX版本的sed需要在-i标志后添加一个额外的参数。所以我。。。。我也必须运行这个:sed-I's/utf8_0900_ai_ci/utf8_general_ci/g'your_file.sqlYes-上传到5.6是最简单的解决方案,Ubuntu有一个mysql-server-5.6包,你可以安装它,它会自动删除5.5。它说未知排序规则utf8什么版本的WordPress?看见
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
sed -i 's/utf8_0900_ai_ci/utf8_general_ci/g' your_file.sql
mysql -u yourdBUser -p yourdBPasswd yourdB < your_file.sql
<!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>";
}

?>