当我创建我的MySQL Cloud数据库的备份时,它不能正确地导出它包含的UTF-8多字节字符。
我觉得这是个虫子。但可能是我错过了什么。我希望有人能帮我!
复制步骤:
character_set_server
设置为utf8mb4
。character_set
to utf8mb4
创建新数据库,collation
创建数据库:设置名称'utf8mb4‘整理' utf8mb4_unicode_ci ';创建表slug
( slug
varchar(255)整理utf8mb4_unicode_ci NOT NULL ) ENGINE=InnoDB默认CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;插入到demo.slug值(’);
设置名称'utf8mb4‘、整理'utf8mb4_unicode_ci';从demo.slug;
INSERT
文件时,相关的INSERT
语句如下所示。并包含问号,而不是有效的UTF-8字符。插入slug
值(‘?’);
请注意,当我在步骤4.中省略该部分时,也会得到确切的值。
发布于 2019-09-26 10:42:24
我试着像你一样通过控制台做这件事,我也谈到了同样的问题。对我有效的解决办法是这样的:
1)白名单您GCP项目的公共IP
存储> SQL >您的实例>连接>连接>+添加网络
通过运行此命令,您可以获得公共IP dig +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)然后通过控制台导入文件,选择所需的数据库。
我试过了,它对我有用。
发布于 2019-09-30 16:01:37
编辑:忽略下面的--成功可能是因为我测试的字符组成的字节也是有效的拉丁-1字符.
似乎只影响4字节的UTF-8编码字符(包括所有的表情符号等等)。
尝试使用3个字节的字符,如Cyrillic ( utf8=ea9980)或像希腊语Epsilon这样的2字节字符(Ɛutf-8=ceb5 5)就成功了。
请注意,Cloud备份不使用导出,因此它们不受影响。
发布于 2019-10-02 06:37:03
我从谷歌那里得到了一个答复:工程部知道这一点。不过,没有ETA的改变。所以没有办法解决这个问题。同时,进行有效备份的唯一方法是使用iker的指示。
https://stackoverflow.com/questions/58101802
复制相似问题