INWTlab / dbtools

R package for connecting and querying databases
Other
6 stars 4 forks source link

MySQL + Encoding als Argument #19

Closed wahani closed 7 years ago

wahani commented 7 years ago

Derzeit wird mit

SET NAMES 'utf-8'

das Encoding gesetzt. Wir sollten in der sendQuery ein entsprechendes Argument einbauen, um die Verwendung optional zu halten.

wahani commented 7 years ago

@mbadicke

devtools::install_github("inwt/dbtools", ref = "encodingArgument")

zum testen des feature.

mbadicke commented 7 years ago

Ich erhalte folgende Meldung:

> devtools::install_github("inwt/dbtools", ref = "encodingArgument")
Downloading GitHub repo inwt/dbtools@encodingArgument
from URL https://api.github.com/repos/inwt/dbtools/zipball/encodingArgument
Installing dbtools
Installing 1 package: data.table
Installing package into ‘S:/R/library/windows’
(as ‘lib’ is unspecified)
trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.3/data.table_1.10.4.zip'
Content type 'application/zip' length 1491022 bytes (1.4 MB)
downloaded 1.4 MB

package ‘data.table’ successfully unpacked and MD5 sums checked
Warning: cannot remove prior installation of package ‘data.table’

ERROR: dependency 'data.table' is not available for package 'dbtools'
* removing 'S:/R/library/windows/dbtools'
Error: Command failed (1)
amitghosh-inwt commented 7 years ago

data.table war von einem anderen Nutzer geladen und ist durch ein Update kaputt gegangen. Du kannst das Ticket auf mich assignen. Dann bringe ich das morgen in Ordnung.

wahani commented 7 years ago

So bereits geschehen. Ich kann das Paket unter Windows und Linux problemlos installieren.

mbadicke commented 7 years ago

@wahani Ich habe immer noch kein Glück. Wirst du aus der unteren Fehlermeldung schlau?

** testing if installed package can be loaded
Warnung in get(".requireCachedGenerics", where)
  internal error -3 in R_decompress1
Error in get(".requireCachedGenerics", where) : 
  lazy-load database 'U:/MariaDB_Monitor/lib/dbtools/R/dbtools.rdb' is corrupt
Fehler: Laden fehlgeschlagen
Ausführung angehalten
ERROR: loading failed
* removing 'U:/MariaDB_Monitor/lib/dbtools'
Error: Command failed (1)
wahani commented 7 years ago

Das ist ein Fehler, der beim installieren von Paketen auftreten kann. Normalerweise lässt sich das Problem durch eine Neuinstallation beheben. Arbeitest du unter Windows?

wahani commented 7 years ago

dbtools_0.2.4.zip

Ich habe dir einmal die Windows-Version hochgeladen. Du könntest es nochmal damit versuchen.

mbadicke commented 7 years ago

Danke! Das hat funktioniert. Ja. Gerade arbeite ich mit Windows.

jonathan-inwt commented 7 years ago

@wahani Wir setzen in der sendData das Encoding ebenfalls hart:

sqlLoadData <- function(path, table, mode) {
  SingleQuery (
    paste0 (
      "LOAD DATA LOCAL INFILE '",
      path,
      "' ",
      if (mode == "replace")
        "REPLACE ",
      "INTO TABLE `",
      table,
      "` ",
      "CHARACTER SET UTF8 ",
      "FIELDS TERMINATED BY ',' ",
      "OPTIONALLY ENCLOSED BY '\"' ",
      "LINES TERMINATED BY '\n' ",
      "IGNORE 1 LINES;"
    )
  )
}
wahani commented 7 years ago

Das bezieht sich aber auf die Daten die eingelesen werden, oder? Das heißt wir sollten eventuell darauf achten, dass die csv tatsächlich als utf8 abgelegt wird?

jonathan-inwt commented 7 years ago

Nein, ich glaube, das ist unkritisch. Aber wenn wir das Encoding flexibel gestalten wollen, dann sollten wir das doch sowohl auf der Lese- als auch auf der Schreib-Seite erlauben, oder?

amitghosh-inwt commented 7 years ago

Das bezieht sich auf die CSV-Datei. Wichtig ist an dieser Stelle daher nur, dass die CSV-Datei tatsächlich UTF-8-Encoding hat. Das Encoding, in dem die Daten später in der Tabelle landen, wird wiederum durch die Einstellungen der Tabelle (CREATE-Statement der Tabelle bzw. implizit über das Default der Datenbank oder des Servers, wenn nicht angegeben wurde) bestimmt.

jonathan-inwt commented 7 years ago

Aha. Dann hat @wahani in https://github.com/INWT/dbtools/issues/19#issuecomment-280312344 wohl doch Recht. Das betrifft dann ja die sendData. Ich prüfe das im Rahmen von #24 gleich mal mit.

jonathan-inwt commented 7 years ago

fwrite kennt (noch) kein enc-Argument

mbadicke commented 7 years ago

@wahani Das Feature sendQuery(..., encoding = NULL) funktioniert. Danke!

wahani commented 7 years ago

In PR #23 bearbeitet