mysql - GCP MySQL Cloud SQL 数据库无法正确导出多字节 UTF-8 字符
问题描述
当我创建 MySQL Cloud SQL 数据库的备份时,它没有正确导出它包含的 UTF-8 多字节字符。
我觉得这是一个错误。但这可能是我遗漏了一些东西。我希望有人可以帮助我!
重现步骤:
创建一个新的 Cloud SQL MySQL 数据库。使用版本 5.7。请务必将标志设置
character_set_server
为utf8mb4
.character_set
使用toutf8mb4
和collation
to创建一个新数据库utf8mb4_unicode_ci
。填充数据库:
SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci'; CREATE TABLE `slug` ( `slug` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; INSERT INTO demo.slug VALUES ('');
我验证我可以使用以下方法正确取回这些值:
SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci'; SELECT * FROM demo.slug;
使用控制台提供的内置导出机制。
当您下载生成的 SQL 文件时,相关
INSERT
语句将如下所示。并包含问号,而不是有效的 UTF-8 字符。INSERT INTO `slug` VALUES ('???');
请注意,当我省略
SET NAMES
第 4 步中的部分时,我也会得到该确切值。
解决方案
我尝试像您一样通过控制台进行操作,但遇到了同样的问题。对我有用的解决方法是这个:
1)将您的GCP项目的公共IP列入白名单
STORAGE > SQL > your instance > CONNECTIONS > Connectivity > +Add network
通过运行此命令,您可以获得公共 IPdig +short myip.opendns.com @resolver1.opendns.com
2)通过运行以下命令创建一个 .sql 文件:mysqldump --databases [YOUR_DB_NAME] -h [YOUR_INSTANCE_PUBLIC_IP] -u [YOUR_USER] -p --default-character-set=utf8mb4 > [FILE_NAME].sql
3)通过运行以下命令将文件移动到存储桶中:gsutil mv [FILE_NAME].sql gs://[YOUR_BUCKET_NAME]/
4)然后你通过控制台导入文件,选择你想要的数据库。
我已经尝试过了,它对我有用。
推荐阅读
- android - 如何仅从我的 android 应用程序中获取 eestrict API?
- python - 为什么我们可以只用一个参数显式调用list(),但可以将多个参数传递给[]?
- macos - CoreAudio:有什么方法可以在不阻止系统休眠的情况下激活音频 IO?
- node.js - 尝试下载一定次数后,从 MongDB GridFS 下载停止正常工作
- c# - 多次运行 Nunit 测试用例的子集
- javascript - 让用户在任何时区输入日期和时间,并确保它们从用于数据库存储的时区转换为 UTC?
- javascript - Using Excel Formulas in JavaScript code outside of excel
- c++ - 链表的排序插入函数
- java - 如何在 Mongo 中取消设置嵌套对象图并在投影中公开某个对象图深度
- excel - 需要将 CPU 和内存信息发送到 Excel 工作表