Slick 3.3.3 不解析 mysql datetime

Slick 3.3.3 not parsing mysql datetime

提问人:Mr. MonoChrome 提问时间:9/21/2023 最后编辑:Mr. MonoChrome 更新时间:9/21/2023 访问量:31

问:

我使用 slick 3.3.3,并且我有一个带有 LocalDateTime 设置列的表(我也尝试了 OffsetDateTime)

有人告诉我 slick 3.3.3 解决了这个问题,但无论我做什么,在尝试解析此列时我仍然会得到 Text '2023-09-20 21:20:21' could not be parsed at index 10

    def startDate = column[Option[LocalDateTime]]("start_date")

我可以在代码中看到他们在 mysql 配置文件 iso8601String 中假设,并且只是让 LocalDateTime 或 OffsetDateTime 自行解析它,但这些都不支持上述字符串,这就是 mysql 自然存储字符串的方式。我不明白。

我自己也尝试使用他们的自定义映射器,但我同样不明白如何设置它

    MappedColumnType.base[Option[OffsetDateTime], String](
      localDateTime => localDateTime.map(_.format(formatter)).orNull,
      timeStr => if (timeStr == null) None else Some(OffsetDateTime.parse(timeStr, formatter))
    )

即使我像这样将隐式直接输入到列中:

def startDate = column[Option[LocalDateTime]]("start_date", O.SqlType("datetime"))(dateTimeMappingOption)

它只是不会触发它。我也不太确定它如何处理可选,如果我希望为每个版本及其可选版本制作解析器,或者是否有某种方法可以自动执行此操作。

感谢帮助。

MySQL 日期时间 光滑

评论


答:

0赞 Gastón Schabas 9/21/2023 #1

这里有 slick 3.3 的迁移指南

MySql的情况下说:

slick.jdbc.MySQLProfile

Java 类型 SQL 类型 例 SQL 文本
java.time.LocalDateTime 发短信 '2019-02-03T18:20:28.661'
java.time.OffsetDateTime 发短信 '2019-02-03T18:20:28.661Z'

这意味着,表中列的数据类型必须为 。如果列可以为 null,则可以像这样定义列TEXT

def startDate = column[Option[LocalDateTime]]("start_date")

如果此示例还不够,请编辑您的帖子,添加您在数据库中创建表的方式,并显示您在执行代码时收到的错误消息