mysql - dbplyr 字符列作为 TEXT 而不是 VARCHAR 到数据库
问题描述
假设我正在使用 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 而不是文本?
解决方案
This may not be your ideal solution, but you could always try first creating the target table in MariaDB before you run the R script. Then, call copy_to
with overwrite
set to false:
From MariaDB:
CREATE TABLE data (
name varchar(255),
skin_color varchar(255)
);
From R:
copy_to(conn, data, temporary=FALSE, overwrite=FALSE)
推荐阅读
- javascript - Babel + nodejs TypeError:无法读取未定义的属性“默认”
- javascript - 在 Javascript 中,箭头函数侦听器内的“this”关键字指向哪个对象?
- vim - Latex 文档中 Vim 中的自动换行(保留缩进)
- javascript - 将 CURL 请求转换为 JS Ajax - 如何验证?
- nativescript - 恢复后有时会在 Nativescript-Vue 上显示主屏幕
- qt - 使用小部件连接 Qtimer
- javascript - 使用 Chart.js - X 轴标签并未全部显示
- git - 如何一次性压扁/变基
- request - 报告以查找 segw 项目的对象并将它们放在请求中
- python - 如何从 ('a', 'b', 'c') 得到 ('a', 'a/b', 'a/b/c')?