我的本地计算机上有一个WordPress数据库,我希望将其转移到cPanel上的托管phpMyAdmin。但是,当我尝试将数据库导入环境时,我不断收到此错误:
#1273 - Unknown collation: 'utf8mb4_unicode_ci'
我试过谷歌,我能找到的唯一解决方案就是这个phpmysql error - #1273 - #1273 - Unknown collation: 'utf8mb4_general_ci',现在已经没有太多帮助了。我已经尝试清除cookie但它仍然无法正常工作。请帮忙!
答案 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_ci
和utf8mb4_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)
经过长时间的研究,我找到了上述解决方案:
首先更改wp-config.php&gt;数据库DB_CHARSET默认 到&#34; utf8&#34;
点击&#34;导出&#34;数据库的选项卡
点击&#34;自定义&#34;单选按钮
转到标题为&#34;格式特定选项&#34;并改变 数据库系统或旧MySQL服务器的下拉列表最大化 输出兼容性:&#34;从NONE到MYSQL40。
滚动到底部,然后点击转到
然后你就开始了。
答案 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>";
}
?>