sql >> Databáze >  >> RDS >> Mysql

Přejmenování sloupců v příkazu MySQL select pomocí R balíčku RJDBC

Narazil jsem na stejný frustrující problém. Někdy AS klíčové slovo by mělo zamýšlený účinek, ale jindy ne. Nebyl jsem schopen identifikovat podmínky, aby to fungovalo správně.

Krátká odpověď: (Děkujeme Simonu Urbánkovi (správci balíčků pro RJDBC), Yevovi a Sebastienovi! Viz Dlouhá odpověď. ) Jedna věc, kterou můžete zkusit, je otevřít připojení JDBC pomocí ?useOldAliasMetadataBehavior=true ve vašem připojovacím řetězci. Příklad:

drv <- JDBC("com.mysql.jdbc.Driver", "C:/JDBC/mysql-connector-java-5.1.18-bin.jar", identifier.quote="`")
conn <- dbConnect(drv, "jdbc:mysql://server/schema?useOldAliasMetadataBehavior=true", "username", "password")
query <- "SELECT `a` AS `b` FROM table"
result <- dbGetQuery(conn, query)
dbDisconnect(conn)

Tohle mi nakonec vyšlo! Další podrobnosti, včetně upozornění, naleznete v Dlouhé odpovědi

Dlouhá odpověď: Zkoušel jsem nejrůznější věci, včetně vytváření pohledů, změn dotazů, používání příkazů JOIN, NOT pomocí příkazů JOIN, používání příkazů ORDER BY a GROUP BY atd. Nikdy jsem nebyl schopen přijít na to, proč některé z mých dotazů dokázaly přejmenovat sloupce a ostatní ne.

Kontaktoval jsem správce balíku (Simon Urbánek.) Zde je to, co řekl:

Poté mi doporučil, abych se ujistil, že mám nejnovější ovladač JDBC pro MySQL. Měl jsem nejnovější verzi. Nicméně mě to přivedlo na myšlenku "možná je to chyba v ovladači JDBC." Hledal jsem tedy na Googlu:mysql jdbc driver bug alias .

Nejlepší výsledek pro tento dotaz byl záznam na bugs.mysql.com . Yev používající MySQL 5.1.22 říká, že když upgradoval z verze ovladače 5.0.4 na 5.1.5, jeho aliasy sloupců přestaly fungovat. Dotaz, zda to byla chyba.

Sebastien odpověděl:"Ne, to není chyba! Je to zdokumentovaná změna chování ve všech následujících verzích ovladače." a navrhl použít ?useOldAliasMetadataBehavior=true s odkazem na dokumentaci ovladače JDBC .

Caveat Lector: V dokumentaci k ovladači JDBC je uvedeno, že

Neměl jsem čas plně prozkoumat, co to znamená. Jinými slovy, nevím, jaké jsou všechny důsledky použití useOldAliasMetadataBehavior=true jsou. Použití na vlastní nebezpečí. Má někdo další informace?



  1. Převod datového typu datetime2 na datový typ datetime má za následek hodnotu mimo rozsah

  2. Používejte relační databáze MySQL na Fedoře 13

  3. Jak vložit znak utf-8 mb4 (emoji v ios5) do mysql?

  4. AWS rds - Jak číst z repliky čtení uvnitř aplikace Java?