未捕获的异常 'PDOException',信息为 'SQLSTATE[22007]:无效的日期时间格式:1366不正确的字符串值。

3

我收到的错误消息是:

PDOException: 未处理的异常 'PDOException',错误信息为“SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect string value: '\xF0\x9F\x98\xB3' for column 'string' at row 1”

我知道这里发生了什么问题。列表正在使用 utf8 编码,但 utf8 编码无法存储 4 字节字符,所以会出现错误。解决此问题的方法可能是改为使用 utf8mb4

我的问题是关于错误消息。我们使用的是 MariaDB。为什么错误消息中会显示“无效日期时间格式”?这是一个文本字段。查询中与日期时间无关。

这个“无效日期时间格式”经常出现在各种错误中,但似乎与实际错误来源无关。


1
因为 MySQL 的日期/时间字符串格式是 yyyy-mm-dd hh:mm:ss。鉴于你的 \xF0,你传递的内容与该格式根本不相似。而且由于你没有展示实际查询语句,我们无法提供任何帮助。 - Marc B
马克·B说的没错。不要把utf8编码的字符串作为datetime参数发送,就是这样。 - Mjh
1
如果您确定在执行此查询时没有损坏任何日期,那么可能是您遇到了一些奇怪的错误,使我们的生活更加有趣。它有多可重现?您能提供一个自包含的示例吗? - Álvaro González
让我们看看SHOW CREATE TABLE以及错误消息中直接涉及的SQL。 - Rick James
1个回答

4

是的,我以前见过这种情况。

我认为这是mariadb方面的一个错误,所有有关不正确值的错误都被称为“不正���的日期时间值”。

然而,我认为这里并没有什么坏处,只会稍微有点混淆。只需记住这个问题,并将其视为“不正确的文本值”即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接