【问题标题】:mysqldump with utf8 can not export the right emojis string带有utf8的mysqldump无法导出正确的表情符号字符串
【发布时间】:2013-12-11 13:58:58
【问题描述】:

我正在使用 MySQL 5.5.29,utf8mb4 字符集,有一个表用户包含一个字段 nickname,其值为十六进制 F09F988EF09F988E,转换为表情符号????????。

现在打开 MySQL 控制台,然后执行:


set names utf8mb4;
select nickname, hex(nickname) from user;

nickname | hex(nickname)
---------+-----------------
????????    | F09F988EF09F988E

然后执行:

mysqldump --default-character-set=utf8 -utest -ptest test_dev user > user.sql

查看user.sql,找到昵称显示??,其中十六进制字符串为3f

那么,带 UTF8 的 mysqldump 如何导出正确的 emojis 字符串呢?


顺便说一句,数据库字符集环境配置如下: 显示像“character_set_%”这样的变量:

'character_set_client', 'utf8mb4'
'character_set_connection', 'utf8mb4'
'character_set_database', 'utf8mb4'
'character_set_filesystem', 'binary'
'character_set_results', 'utf8mb4'
'character_set_server', 'utf8mb4'
'character_set_system', 'utf8'
'character_sets_dir', '/data/mysql/share/charsets/'

【问题讨论】:

  • 当 1) 将默认字符集更改为 "--default-character-set=utf8mb4" 2) 直接导出到文件时会发生什么情况,例如执行“mysqldump --default-character-set=utf8mb4 -utest -ptest test_dev user -r user.sql”
  • 另外,您是否尝试过重新导入数据?可能只是您的编辑器正在显示问号,因为它的字体中没有可用的正确字符。

标签: mysql utf-8 character-encoding emoji


【解决方案1】:

谢谢丹纳克!
通过指定 utf8mb4 字符集并将 mysqldump 版本升级到 5.5.3+,mysqldump 和 mysql 适用于 4 字节表情符号。

[tomcat@localhost ~]$ mysqldump --default-character-set=utf8mb4 -utest -ptest test_dev user > user.sql

如果显示如下错误:

mysqldump: Character set 'utf8mb4' is not a compiled character set and is not specified in the '/usr/share/mysql/charsets/Index.xml' file

检查您的mysqldump 版本(mysqldump --version

[tomcat@localhost ~]$ mysqldump --version
mysqldump  Ver 10.11 Distrib 5.0.95, for redhat-linux-gnu (x86_64)

将mysqldump升级到5.5.33后即可使用。

[tomcat@localhost ~]$ mysqldump --version
mysqldump  Ver 10.13 Distrib 5.5.33, for Linux (x86_64)

【讨论】:

  • 相关:截至目前,MySql Workbench 中的导出工具将默认字符集选项硬编码为 utf8 ...*sigh*..
  • @BradKent Fun-Fact:多亏了 MySQLWorkbench,我才知道了这个解决方案,哈哈。使用 utf8mb4 就像一个魅力:)
【解决方案2】:

确实需要在导出时使用mysqldump --default-character-set=utf8mb4(注意--default-character-set选项)。

但是导入仍然非常棘手。我尝试了很多不同的方法,但都没有成功。

最后,我发现你需要像这样创建一个importer.sql 文件:

USE my_example_db_name;

# Select the right charset
SET NAMES 'utf8mb4';

# Import from SQL file
SOURCE /somewhere/dump.sql;

# Disconnect from SQL server
EXIT

然后,要导入,运行以下命令:

mysql -u my_user my_example_db_name < /somewhere/importer.sql

感谢https://korobochkin.wordpress.com/2017/02/25/import-and-export-wordpress-database-with-utf8mb4-charset/

【讨论】:

  • 像魅力一样工作!谢谢兄弟!
  • @EgistLi 很高兴它有帮助!
【解决方案3】:

也为此苦苦挣扎了一段时间。该线程中的其他解决方案仍然导致dump.sql 仍然有多个错误的表情符号字符。 事实证明,使用&gt; 不是一种安全的导出方式(至少不是在我的机器上,Windows 10)。使用 -r dump.sql 而不是 &gt; dump.sql 就可以了。

此命令导出数据库的所有表:

mysqldump --default-character-set=utf8mb4 -h [host] -u [username] -p [database_name] --set-gtid-purged=OFF --port=3306 --protocol=tcp --skip-triggers -r dump.sql

然后为了导入,首先运行这个命令:

mysql -h [host_name] -u [username] -p [database_name] --binary-mode -o

然后,在 mysql 模式下,键入以下内容:

USE database_name;
SET NAMES 'utf8mb4';
SOURCE /dump.sql;
EXIT

希望这可以帮助遇到同样问题的其他人!

【讨论】:

    猜你喜欢
    • 2016-10-05
    • 2019-10-09
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-19
    • 2021-01-20
    相关资源
    最近更新 更多