我最近转储了一个数据库,作为将其从旧服务器迁移到新服务器的一部分。某些表将utf8mb4
字符集作为默认排序规则,并作为某些字段的字符集。
其中一个表还有一个POINT类型的字段。当我运行mysqldump --default-character-set=utf8mb4 ... > dump.sql
然后尝试导入dump.sql
时,对于在POINT字段中设置了位置的任何行,我都会收到"无效utf8mb4字符串"警告。
我需要担心这个吗?在我看来,数据迁移是正确的,但我不喜欢看到警告!
编辑:示例代码和如何复制。以下是mysqldump
在示例数据库的示例表上的输出,没有特殊选项(添加默认的utfmb4字符集选项没有帮助)。该表有一行:
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `Items` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Title` varchar(255) CHARACTER SET utf8mb4 NOT NULL,
`LatLong` point NOT NULL,
PRIMARY KEY (`ID`),
SPATIAL KEY `LatLong` (`LatLong`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
INSERT INTO `Items` VALUES (1,'item1',' ?4??=@??O@?V?');
如果在包含此SQL的文件上使用mysqlsource file.sql
从运行,则在插入时会收到以下警告:
Query OK, 1 row affected, 1 warning (0.00 sec)
Warning (Code 1300): Invalid utf8mb4 character string: 'BE141E'
进一步信息:
> file -i file.sql
file.sql: application/octet-stream; charset=binary
> mysql --version
mysql Ver 14.14 Distrib 5.7.17, for Linux (i686) using EditLine wrapper
运行Ubuntu 16.04 LTS
我认为这是https://bugs.mysql.com/bug.php?id=80150。在MySQL 5.7.23、8.0.12中修复。Changelog:"如果使用mysqldump或mysqlpump在没有--hex-blob选项的情况下转储二进制数据,则重新加载转储文件可能会产生虚假的警告(无论警告如何,都会正确插入值)使警告静音。">