2012-07-09 16 views
1

我使用的製表符分隔的文件將數據插入到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, 
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

你的輸入數據是什麼樣的? – 2012-07-09 23:21:03

+0

請發佈「membership」表的結構和membership.txt文件的一些示例行。 – bobwienholt 2012-07-09 23:21:05

+0

@Michael請檢查更新 – KillerGearz 2012-07-10 02:02:10

回答

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) 
);