使用Korma和MySQL强制转换空日期字段



使用Korma和MySQL,我试图从一个名为posts的表中选择,默认情况下有一个发布日期字段为零。

mysql> describe posts;
+-----------+--------------+------+-----+---------------------+-------+
| Field     | Type         | Null | Key | Default             | Extra |
+-----------+--------------+------+-----+---------------------+-------+
| id        | int(11)      | NO   | PRI | 0                   |       |
| title     | varchar(250) | YES  |     | NULL                |       |
| content   | text         | YES  |     | NULL                |       |
| status    | tinyint(1)   | YES  |     | 0                   |       |
| created   | timestamp    | NO   |     | CURRENT_TIMESTAMP   |       |
| published | timestamp    | NO   |     | 0000-00-00 00:00:00 |       |
| author    | int(11)      | NO   | MUL | NULL                |       |
+-----------+--------------+------+-----+---------------------+-------+
7 rows in set (0.02 sec)

如果我尝试选择并使用已发布的字段,我会得到以下错误:

user=>(选择帖子(字段:id:title:content:status:created:已发布))使用SQL执行查询失败:SELECT posts.id,posts.title,posts.content,posts.status,posts.created,posts.published FROM posts::[]ClassCastExceptionjava.lang.RuntimeException不能强制转换为java.sql.SQLExceptionclojure.jdbc/print-sql-eception(jdbc.clj:350)

如果我不使用已发布的字段,一切都很好:

user=>(选择帖子(字段:id:title:content:status:created:author))[{:id 1,:title"Hello World!",:content">欢迎来到Beats,世界上最先进的Clojure Beat引擎",:状态true,:created#,:author 1}{:id 2,:title"你好,世界!,又来了!",:content"Sayin't'gain!欢迎Beats,世界上最先进的Clojure Beat引擎",:status true,:created#,:author 2}]

如何处理此字段?我试着用一个简单的日志语句向我的实体添加一个转换函数,但它似乎甚至没有被调用。

假设Marc B是对的,并且问题的原因是您有一个发布为0000-00-00的记录,那么您可以将zeroDateTimeBehavior=convertToNull添加到Korma mysql:db密钥中,例如:

:db "mydb?zeroDateTimeBehavior=convertToNull"

现在JDBC和Korma将返回该记录的已发布nil:

(select posts (fields :id :published))
;; [{:published nil, :id 1}]

您可能需要重新启动repl才能使标志生效。

另请参阅:

  • http://dev.mysql.com/doc/refman/5.1/en/connector-j-reference-configuration-properties.html
  • 在JDBC中处理DATETIME值0000-00-00 00:00:00

相关内容

  • 没有找到相关文章

最新更新