MySql使用制表符分隔插入位

时间:2012-07-09 23:18:22

标签: mysql

我使用制表符分隔文件将数据插入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

2 个答案:

答案 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值...

描述了一种有些笨拙的解决方法。