При извлечении элементов из таблицы MySQL с использованием funcool / clojure.jdbc все имена столбцов строчные, даже если таблица была создана с именами столбцов в смешанном регистре. Я нашел разные ответы, которые указывают, что двойные кавычки, обратные символы и т. Д. Должны что-то делать, но они этого не делают. Клиентская сторона - это Windows. Серверная часть MySQL - Linux.
Например, этот скриншот из HeidSQL показывает несколько имен столбцов:
Я могу запросить имена столбцов в Clojure REPL с помощью show columns from tablename
:
arena-rest.sql> (map :field (fetch "show columns from EEComponents"))
("Number" "Category" "Footprint" "Footprint path" ...
Однако, когда я запрашиваю данные, я получаю имена полей в нижнем регистре на карте возврата:
arena-rest.sql> (fetch "select Number from EEComponents")
[{:number "120-00001"} {:number "190-99999"} {:number "180-00002"}
{:number "180-00003"}]
Я ожидаю ответа типа
[{:Number "120-00001"} {:Number "190-99999"} {:Number "180-00002"}
{:Number "180-00003"}]
Я пробовал select "Number" from EEComponents
, select Number AS "Number"...
и т. Д., В том числе с использованием обратных кавычек, но не повезло.
Я нашел несколько вопросов / ответов SO, которые указывают на то, что для всех реализаций SQL это нормальное поведение, когда имена возвращаемых строчек в возвращаемых элементах строчные, однако, когда я выполняю запрос, используя другое средство, такое как непосредственно в командной строке MySQL, регистр сохраняется в возвращаемых данных:
Так что я не уверен, находится ли это в java или в clojure части. Некоторые поиски показывают, что регистр столбца должен быть сохранен в Java ResultSet. Так что я думаю, что это локально для оболочки funcool / clojure.jdbc.
Мой закрытый проект:
(defproject arena-rest "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:dependencies [[org.clojure/clojure "1.9.0"]
[clj-http "3.9.1"]
[cheshire "LATEST"]
[crouton "LATEST"]
[mysql/mysql-connector-java "8.0.12"]
[funcool/clojure.jdbc "0.9.0"]
[org.clojure/tools.trace "0.7.9"]
[org.flatland/ordered "1.5.6"]]
:main arena-rest.core)
Мой файл clojure начинается так:
(ns arena-rest.sql
(:require [jdbc.core :as jdbc]
[clojure.string :as str]
[clojure.pprint :refer [pprint]]
[clojure.repl :refer [doc]] ... and other stuff
Итак, можно ли возвращать имена столбцов в правильном регистре, используя funcool / clojure.jdbc, или мне нужно использовать другой, например org.clojure / java.jdbc?