MySQLでTRUEorFALSEの値を持つ列にBOOLEAN型を指定しCSVインポートするとTRUEの値も0になる
# 原因
MySQLのBOOLEAN型では、0以外の "数値" をtrueと判定するから
# 対処
CSVのLOAD時に、BOOLEAN型の列をbooleanリテラルにSETし直す
# 具体例と説明
example.csv
### CREATE TABLE
CREATE TABLEをするときに、is_okカラムの型をBOOLEANに指定します
CREATE TABLE example_tb(
name VARCHAR(10),
is_ok BOOLEAN
);
### LOAD DATA LOCAL INFILE(失敗例)
CSVをロードします
LOAD DATA LOCAL INFILE '/path/path/example.csv'
INTO TABLE example_tb
FIELDS
TERMINATED BY ','
IGNORE 1 LINES;
TRUEの値も全部0になってしまいます
### LOAD DATA LOCAL INFILE(成功例)
LOAD DATA LOCAL INFILE '/path/path/example.csv'
REPLACE
INTO TABLE example_tb
FIELDS
TERMINATED BY ','
IGNORE 1 LINES
(name, @is_ok)
SET is_ok = IF(@is_ok='TRUE', true, false);
今度はうまく行きました
# 参考文献
参考とさせていただきました。
MySQL :: MySQL 8.0 Reference Manual :: 13.2.7 LOAD DATA Statement