mysql - dbplyr 字符列作为 TEXT 而不是 VARCHAR 到数据库

标签 mysql r dplyr dbplyr

假设我正在使用 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?

最佳答案

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

关于mysql - dbplyr 字符列作为 TEXT 而不是 VARCHAR 到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56355920/

相关文章:

php - 使用Laravel 4.2中的Chumper数据表库加入MySQL表

php - LEFT JOINING 两个在字符串条件下不互相引用的表是一个坏主意吗?

r - 使用 ggplot() 绘制路径和点图

R包并行: how to print the output from one node?

php - 在单独的页面上显示数据库中显示的一组图像中的单个图像

utf-8 - 在 mysql 服务器上从 latin1 更改为 utf8

javascript - 在 R 中使 visnetwork 图的边缘变直

r - 如何按组跨行获得重复的平均值

R,dplyr : how to change the value in one column to NA based on NA values in other columns (using OR operator)

r - mutate_at 出现 "Variable context not set"错误,dplyr 版本 >= 0.7