символьные столбцы dbplyr для базы данных в виде текста вместо VARCHAR - PullRequest
2 голосов
/ 29 мая 2019

Предположим, я использую набор данных starwars и попытался создать таблицу в базе данных Mysql (используя copy_to)

    library(tidyverse)
    data <- starwars %>%
      select(name, skin_color)

    data

    # A tibble: 87 x 2
   name               skin_color 
   <chr>              <chr>      
 1 Luke Skywalker     fair       
 2 C-3PO              gold       
 3 R2-D2              white, blue
 4 Darth Vader        white      
 5 Leia Organa        light      
 6 Owen Lars          light      
 7 Beru Whitesun lars light      
 8 R5-D4              white, red 
 9 Biggs Darklighter  light      
10 Obi-Wan Kenobi     fair       
# … with 77 more rows

conn <- DBI::dbConnect(RMariaDB::MariaDB(),
                            host = "myhost",
                            user = "myuser",
                            password = "mypass",
                            db = "mydb")

copy_to(conn, data, temporary = FALSE, overwrite = TRUE)

Проблема в том, что символьные столбцы создаются как столбцы TEXT, но правильное определение должно быть VARCHAR.

DESC table data

`data` (
    `name` TEXT NULL,
    `skin_color` TEXT NULL
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;

Как заставить varchar вместо текста?

1 Ответ

0 голосов
/ 29 мая 2019

Возможно, это не идеальное решение, но вы всегда можете попробовать сначала создать целевую таблицу в MariaDB, прежде чем запускать сценарий R.Затем вызовите copy_to с overwrite, установленным в false:

Из MariaDB:

CREATE TABLE data (
    name varchar(255),
    skin_color varchar(255)
);

Из R:

copy_to(conn, data, temporary=FALSE, overwrite=FALSE)
...