Slick 3.3.3不解析mysql日期时间

问题描述 投票:0回答:1

我使用 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 datetime slick
1个回答
0
投票

这里有 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'

这意味着表中列的数据类型必须是

TEXT
类型。如果列可以为空,您可以像这样定义列

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

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

© www.soinside.com 2019 - 2024. All rights reserved.