我使用制表符分隔文件将数据插入MySql数据库
在位字段中我将0和1作为值,但是当我使用下面的命令将数据插入数据库时,它将0转换为1.
load data local infile 'c:/membership.txt' into table membership;
因此位列on的每一行都有值为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
答案 0 :(得分:1)
导入CSV文件时,您的值似乎被隐式引用为字符串。在5.0.3之后的MySQL中使用BIT
类型时,它用作位字段(例如'11001'),而不是布尔类型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)
);
答案 1 :(得分:1)
MySql文档似乎涵盖了此问题:http://dev.mysql.com/doc/refman/5.6/en/load-data.html
请参阅以下开头的部分页面的中间部分:
无法使用二进制表示法加载BIT值...
描述了一种有些笨拙的解决方法。