1

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
4

2 に答える 2

1

CSVファイルをインポートするとき、値が文字列として暗黙的に引用されているようです。5.0.3以降のMySQLで型を使用する場合BIT、ブール型1/0としてではなく、ビットフィールド(たとえば「11001」など)として使用することを目的としています。文字列値'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)
);
于 2012-07-10T02:16:43.940 に答える
1

MySqlのドキュメントはこの問題をカバーしているようです:http: //dev.mysql.com/doc/refman/5.6/en/load-data.html

次で始まるセクションのページの約半分を参照してください。

2進表記を使用してBIT値をロードすることはできません...

やや不器用な回避策について説明します。

于 2013-02-28T21:49:30.847 に答える