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

6vl6ewon  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(364)

当使用funcool/clojure.jdbc从mysql表中检索项时,所有列名都是小写的,即使该表是用大小写混合的列名创建的。我发现了各种各样的答案,表明重复引用,倒勾等,应该做些什么,但他们没有。客户端是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" ...

但是,当我查询数据时,在返回Map中会得到小写字段名:

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"... 等,包括使用回击,但没有运气。
我发现了一些问题/答案,这些问题/答案表明所有sql实现在返回的项中使用小写列名是正常的行为,但是当我使用其他方法(例如直接在mysql命令行中)运行查询时,大小写保留在返回的数据中:

所以我不确定它是在java还是clojure部分。一些搜索表明应该在java结果集中保留列大小写。所以我认为这是funcool/clojure.jdbc Package 器的本地部分。
我的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等其他列名?

b1zrtrql

b1zrtrql1#

这是确定如何强制结果集中的列名的相关代码,默认情况下将字符串转换为小写。
尝试 (fetch "select Number from EEComponents" {:identifiers identity}) 使弦保持原样,或 {:identifiers keyword} 把它们变成关键词。
(我也会考虑使用https://github.com/clojure/java.jdbc)

相关问题