我在Drush中看到的完整错误是:
请先将所有数据库表转换为utf8mb4,然后再在settings.php中启用它。请参阅有关添加[警告]的文档 4字节UTF-8支持以获取更多信息。 (当前使用数据库4字节UTF-8支持已启用,但是数据库 表需要转换)
我使用的是Drupal 7的最新版本。我已将所有表转换为utf8mb4_unicode_ci。我最初是通过提示手动完成的,但是随后在表和字段上使用phpMyAdmin再次运行了更新(为了确保,因为Drush仍然告诉我“请先将所有数据库表转换为utf8mb4,然后再在settings.php中启用它) 。”)所有表都设置为InnoDB。
在my.cnf文件中,我已确保
[mysqld]
innodb_large_prefix=true
innodb_file_format=barracuda
innodb_file_per_table=true
同一服务器上的另一个站点已启用utf8mb4支持,并且不会引发错误。这两个站点都使用最新版本的PHP5.6.x。 Drush版本是8.1.2。 MySql是最新版本的5.5.x。
我已经通过drush cc all清除了所有Drupal缓存并重新启动了MySQL服务器。该设置在带有Plesk的Ubuntu下。
寻找关于我可能错过的内容以及为什么Drupal问我要转换看起来已经转换过的表的想法(phpMyAdmin确实将排序规则显示为utf8mb4_unicode_ci。)
答案 0 :(得分:1)
请参阅https://www.drupal.org/forum/support/upgrading-drupal/2018-04-03/upgrade-to-758-database-utf-8-issues#comment-12968331。该消息不是来自深入的sql分析,而是取决于布尔变量drupal_all_databases_are_utf8mb4
的值。无论您是手动进行表格转换,还是通过建议的草稿脚本(https://www.drupal.org/project/utf8mb4_convert)(我认为)都会为您设置此变量,都需要在表转换后将此变量设置为TRUE
。
-Bronius
答案 1 :(得分:0)
您在settings.php
中设置了排序规则和字符集吗?
$databases['default']['default'] = array(
'driver' => 'mysql',
'database' => 'databasename',
'username' => 'username',
'password' => 'password',
'host' => 'localhost',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_general_ci',
);