MySQL 8.0 示例数据库 sakila 中有一张表 address, 其中 location 属性是 geometry 类型. 在直接使用 mysqldump.exe 备份时, 比如 mysqldump.exe -uroot -p sakila > sakila.sql
所得到的 sakila.sql 文件中, 在插入 address 数据时, location 部分的数据是二进制类型
例如前三个数据为
INSERT INTO `address` VALUES (1,'47 MySakila Drive',NULL,'Alberta',300,'','',_binary '\0\0\0\0\0\0\0>\n2]c4\\�vۍ�\�H@','2014-09-25 14:30:27'),(2,'28 MySQL Boulevard',NULL,'QLD',576,'','',_binary '\0\0\0\0\0\0\0�\�߁$c@N\�P\"�;�','2014-09-25 14:30:09'),(3,'23 Workhaven Lane',NULL,'Alberta',300,'','14033335568',_binary '\0\0\0\0\0\0\0\�\�hc4\\�\�~p�\�H@','2014-09-25 14:30:27');
这在导入数据库时, 会发生错误. 提示
Error Code: 1416. Cannot get geometry object from data you send to the GEOMETRY field
现在加入 --hex-blob 选项
"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqldump.exe" --hex-blob -uroot -p -P 3308 sakila > sakila_new.sql
如果要导入到低版本的MySQL 中, 比如 MySQL 5.7.23, 则建议将所得的 sakila_new.sql 中的 utf8mb4 改为 utf8, 校对字符集 utf8mb4_0900_ai_ci 改为 utf8_general_ci.
当然, 相应的, 首先在 MySQL 5.7.23 中建立数据库 sakila, 字符集使用 utf8, 校对字符集使用 utf8_general_ci.
附 mysqldump.exe 的基本使用方法:
Usage: mysqldump [OPTIONS] database [tables]
OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR mysqldump [OPTIONS] --all-databases [OPTIONS]
For more options, use mysqldump --help
References:
[1] mysql - Back up a table with a GEOMETRY column using mysqldump? - Stack Overflow
[2] MySQL Bugs: #43544: mysqldump should convert GEOMETRY columns to hex with --hex-blob option
[3] OGR2OGR Cheatsheet (bostongis.com)
[4] mysql设置了utf8mb4还是报错_升级MySQL 8.0的诡异故障,utf8mb4_0900_ai_ci是什么?_编程小族管的博客-CSDN博客