如何让mysqldump使用/*!40101 SET character_set_client = utf8mf4 */;?

zho*_*uji 5 mysql mysqldump

当我使用 mysqldump 导出 mysql 数据库时,它总是产生一个 dump.sql 包含

...some other things...
/*!40101 SET character_set_client = utf8*/;
...some other things...
Run Code Online (Sandbox Code Playgroud)

这是我使用的 mysqldump 命令:

mysqldump -u root -p databaseName -R -E --single-transaction --default-character-set=utf8mb4 > dump.sql
Run Code Online (Sandbox Code Playgroud)

mysql数据库的字符集是utf8mb4而不是utf8,字符相关的变量是:

...some other things...
/*!40101 SET character_set_client = utf8*/;
...some other things...
Run Code Online (Sandbox Code Playgroud)

为什么mysqldump总是添加 /*!40101 SET character_set_client = utf8*/而不是 /*!40101 SET character_set_client = utf8mb4*/

如果/*!40101 SET character_set_client = utf8*/使用会发生什么?

我们可以使用mysqldump/*!40101 SET character_set_client = utf8mb4*/吗?

Ric*_*mes 5

那种特殊类型的注释说“如果运行一个早于 4.1.1 的版本,则将此作为注释;否则执行它”。

utf8mb4 在 5.5.3 中出现,因此“正确”版本将是

/*!50503 SET character_set_client = utf8mb4*/
Run Code Online (Sandbox Code Playgroud)

如果您的 mysqldump 和 mysql 版本比 5.5.3 新,保留它也无妨40101。如果您确实尝试在 5.5.3 之前的 mysql 上加载它,SET则可能会抱怨。

至于为什么 mysqldump 不说 50503 - 我怀疑这是一个错误。在http://bugs.mysql.com 上归档。

  • 来自 MySQL 文档:_如果在 ! 之后添加版本号 字符,仅当 MySQL 版本 ** 大于 ** 或等于指定的版本号_ 时才执行注释中的语法,这意味着该答案第一行的完全相反是正确的。 (5认同)