我正在使用制表符分隔文件将数据插入 MySql 数据库
在位字段中,我得到了 0 和 1 作为值,但是当我使用下面的命令将数据插入数据库时,它会将 0 转换为 1。
load data local infile 'c:/membership.txt' into table membership;
因此,位列在每一行中的值为 1。
表的结构是
Create table Membership
(
MemberShipId int not null AUTO_INCREMENT,
StartDate datetime not null,
EndDate datetime not null,
AgeGroup tinyint,
Newsletter bit,
Donation decimal(7,2),
FavouriteShow varchar(50),
Comments varchar(200),
MemberId int not null,
PRIMARY KEY (MemberShipId),
CONSTRAINT fk_Member FOREIGN KEY (MemberId) REFERENCES Member (MemberId)
);
样本输入是
1 2012-01-01 2012-01-01 0 0 \N \N 1
2 2012-01-01 2012-01-01 1 0 \N \N 2
3 2012-01-01 2012-01-01 1 0 \N \N 3
4 2012-01-01 2012-01-01 1 0 \N \N 4
5 2012-01-01 2012-01-01 0 0 \N \N 5
6 2012-01-01 2012-01-01 0 0 \N \N 6
最佳答案
导入 CSV 文件时,您的值似乎被隐式引用为字符串。在 5.0.3 之后的 MySQL 中使用 BIT
类型时,它旨在用作位字段(例如“11001”),而不是 bool 类型 1/0。字符串值 '0'
和 '1'
似乎都被解释为非空数据,您不只是得到 0。
相反,您可以使用 TINYINT(1)
类型或其同义词 BOOLEAN
,它将仅支持数值 1 或 0。
Create table Membership
(
MemberShipId int not null AUTO_INCREMENT,
StartDate datetime not null,
EndDate datetime not null,
AgeGroup TINYINT,
/* use TINYINT(1) for a boolean OR use BOOLEAN */
Newsletter TINYINT(1),
Donation decimal(7,2),
FavouriteShow varchar(50),
Comments varchar(200),
MemberId int not null,
PRIMARY KEY (MemberShipId),
CONSTRAINT fk_Member FOREIGN KEY (MemberId) REFERENCES Member (MemberId)
);
关于MySql 插入位使用制表符分隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11404602/