Приведите пустое поле даты, используя Korma и MySQL.

Используя Korma и MySQL, я пытаюсь выбрать из таблицы с именем posts, есть поле для опубликованной даты, которое по умолчанию равно nil.

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: заголовок: контент: статус: создан:опубликован)) Не удалось выполнить запрос с помощью SQL: SELECT posts.id, posts.title, posts.content, posts.status, posts.created, posts.published FROM posts:: [] ClassCastException java.lang.RuntimeException не может быть приведено к java.sql.SQLException clojure.java.jdbc/print-sql-exception (jdbc.clj:350)

Если я не использую опубликованное поле, все работает нормально:

user => (выберите сообщения (поля: id: title: content: status: made:author)) [{:id 1,:title "Hello World!",:content "Добро пожаловать в Beats, самый совершенный в мире движок Clojure Beat Engine!",: status true,: созданный #,: автор 1} {:id 2,:title "Hello World! again!",:content "Sayin 't 'gain! Добро пожаловать в Beats, самый совершенный в мире Clojure Beat Engine!",: Статус true,: создан #,: автор 2}]

Как я могу обработать это поле? Я пытался добавить функцию преобразования в свою сущность с помощью простого оператора log, но, похоже, его даже не вызывали.

1 ответ

Если предположить, что Марк Б прав, и причина проблемы в том, что у вас есть запись, опубликованная как 0000-00-00, то вы можете добавить zeroDateTimeBehavior = convertToNull в ключ Korma mysql: db, например:

:db "mydb?zeroDateTimeBehavior=convertToNull"

Теперь JDBC и, следовательно, Korma вернут опубликованный ноль для этой записи:

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

Возможно, вам придется перезапустить реплей, чтобы флаг вступил в силу.

Смотрите также:

Другие вопросы по тегам