【问题标题】:dbplyr character columns to database as TEXT instead of VARCHARdbplyr 字符列作为 TEXT 而不是 VARCHAR 到数据库
【发布时间】:2019-05-29 08:13:07
【问题描述】:

假设我使用的是 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 而不是 text?

【问题讨论】:

    标签: mysql r dplyr dbplyr


    【解决方案1】:

    这可能不是您理想的解决方案,但您始终可以先尝试在 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-17
      • 2014-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-03
      • 1970-01-01
      • 2020-08-23
      相关资源
      最近更新 更多