如何使用funcool / clojure.jdbc从MySQL查询中获取区分大小写的列名

时间:2018-10-26 20:33:11

标签: mysql clojure

使用funcool / clojure.jdbc从MySQL表中检索项目时,即使表是使用大小写混合的列名创建的,所有列名也都是小写的。我找到了各种答案,表明双引号,反引号等应采取的措施,但实际上却没有。客户端是Windows。 MySQL服务器端是Linux。

例如,此HeidSQL的屏幕截图显示了一些列名:

enter image description here

我可以使用show columns from tablename查询Clojure REPL中的列名:

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 EEComponentsselect Number AS "Number"...等,包括使用反引号,但是没有运气。

我发现了一些SO问题/答案,表明所有SQL实现对返回项目中的小写列名都是正常的行为,但是,当我使用其他方式(例如直接在MySQL命令行中)运行查询时,大小写保留在返回的数据中:

enter image description here

所以我不确定它是在Java还是clojure部分中。一些搜索表明列大小写应保留在Java ResultSet中。因此,我认为这对funcool / clojure.jdbc包装器是本地的。

我的clojure项目是:

(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)?

1 个答案:

答案 0 :(得分:1)

This是用于确定如何在结果集中强制转换列名的相关代码,默认情况下会将字符串转换为小写。

尝试(fetch "select Number from EEComponents" {:identifiers identity})保留字符串不变,或尝试{:identifiers keyword}将其变成关键字。

(我也考虑使用https://github.com/clojure/java.jdbc