【问题标题】:"Invalid utf8mb4 character string" warnings on POINT fields when importing from a mysqldump从 mysqldump 导入时,POINT 字段上的“无效 utf8mb4 字符串”警告
【发布时间】:2017-02-06 20:00:24
【问题描述】:

我最近转储了一个数据库,作为将它从旧服务器迁移到新服务器的一部分。一些表将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','\0\0\0\0\0\0\0?4??=@\??O@?V?');

如果您在包含此 SQL 的文件上使用 mysql source 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

【问题讨论】:

  • 奇怪。你能给我们看一个转储文件中的例子吗?
  • 我已经用示例转储更新了帖子

标签: mysql utf8mb4


【解决方案1】:

我认为这是 https://bugs.mysql.com/bug.php?id=80150 的另一个症状。 在 MySQL 5.7.23、8.0.12 中修复。变更日志:“如果使用 mysqldump 或 mysqlpump 转储二进制数据而没有 --hex-blob 选项,重新加载转储文件可能会产生虚假警告(无论警告如何,值都被正确插入)。这些值现在写在 _binary 前面介绍人 使警告静音。”

【讨论】:

  • 虽然此链接可能会回答问题,但 Stack Overflow 不鼓励仅链接的答案,您可以通过获取链接的重要部分并将其放入您的答案来改进此答案,这样可以确保您的答案是如果链接被更改或删除,仍然是一个答案:) 最后你的签名可能会被删除
猜你喜欢
  • 2016-10-20
  • 2015-04-14
  • 2020-02-17
  • 2019-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-12
  • 2019-06-01
相关资源
最近更新 更多