MySql使用制表符分隔插入位
我使用制表符分隔的文件将数据插入MySql数据库 在位字段中,我得到了0和1作为值,但当我使用下面的命令将数据插入数据库时,它正在将0转换为1MySql使用制表符分隔插入位,mysql,Mysql,我使用制表符分隔的文件将数据插入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, StartDa
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文件时,您的值似乎被隐式引用为字符串。在MySQL 5.0.3之后的版本中使用
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)
);
MySql文档似乎涵盖了这个问题: 请参见本页中间的以下部分: 无法使用二进制表示法加载位值
这里描述了一个有点笨拙的解决方法。您的输入数据是什么样子的?请发布“membership”表的结构和membership.txt文件的一些示例行。@Michael请检查updates@KillerGearzMySQL的早期版本将
bit
解释为tinyint(1)
但较新版本实际上有一个二进制位
类型。尝试将您的表定义为时事通讯TINYINT(1)
。