PQR
@PQR

Как изменить sql_mode при подключении к MySQL из Clojure?

Не могу изменить sql_mode при подключении к MySQL из Clojure.

Простейший проект project.clj
(defproject test-project "0.1.0-SNAPSHOT"
  :dependencies [[org.clojure/clojure "1.6.0"]
                 [org.clojure/java.jdbc "0.3.7"]
                 [mysql/mysql-connector-java "5.1.35"]]
  )


Дальше у меня есть src/test_project/core.clj
(ns test-project.core
  (:require [clojure.java.jdbc :as j]))

(def mysql-db {:subprotocol "mysql"
               :subname "//127.0.0.1:3306/dbname?zeroDateTimeBehavior=convertToNull&sessionVariables=sql_mode=''"
               :user "root"
               :password "1234"})

(j/execute! mysql-db ["set session sql_mode=''"])
(j/query mysql-db ["select @@SESSION.sql_mode"])


Запускаю все строки по очереди нажатием ctrl+enter в LightTable.
Цель - изменить sql_mode на пустое значение, чтобы MySQL не требовал явного указания default значений при вставке строк (многие поля во многих таблицах в базе не имеют default значений и менять схему базы не вариант).

После запуска в REPL всех строк, рядом с последней строкой в LightTable вижу результат: ({:@@session.sql_mode "STRICT_TRANS_TABLES"})

sql_mode так и не поменялся на пустой :(

Как поменять?
  • Вопрос задан
  • 836 просмотров
Решения вопроса 1
PQR
@PQR Автор вопроса
Пол часа гуглил, ничего не нашел, задал вопрос на тостере, погуглил ещё 5 минут - нашел! Эффект генерала (тостера).

stackoverflow.com/questions/590937/mysql-coldfusio...

The driver needs the STRICT_TRANS_TABLES mode enabled to enforce JDBC compliance on truncation checks.

If you can't use STRICT_TRANS_TABLES as part of your sql_mode, then you'll have to disable truncation checks by adding "jdbcCompliantTruncation=false" as a URL configuration parameter.


Переводя на русский, я изменил строку подключения, добавив параметр jdbcCompliantTruncation=false
(def mysql-db {:subprotocol "mysql"
               :subname "//127.0.0.1:3306/dbname?zeroDateTimeBehavior=convertToNull&jdbcCompliantTruncation=false"
               :user "root"
               :password "1234"})


И поскольку у меня в mysql.ini уже прописано sql_mode="", то в коде его менять уже не понадобится. Удаляю предпоследнюю строку (j/execute ... за ненадобностью.

А последняя строка, как и требовалось, теперь показывает результат ({:@@session.sql_mode ""})
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы