dポイントプレゼントキャンペーン実施中!

MySQLサーバにLOAD DATA INFILEコマンドを使ってファイルを読み込む時,なぜかBit(1)型の列にTrueを入れる際にWarningが無くなりません.
オプションには

FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\r\n'

を選択して "列1","列2","列3"\r\n の形式で読み込んでいます.
この時,Bit(1)型の列にFalseを入れるときには"\0"や"\n",""のような値を入れれば問題なくFalseとなるのですが,逆に他の何を入れてもwarningの発行とともにTrueになり,(Trueが入る事ではなく,warningの発行の方に)困っております.

何方か,warningを出さずにtrueを入力する方法を教えて頂けませんでしょうか.
宜しくお願いします.

A 回答 (3件)

追記です。



trueやfalseとして扱いたいなら、bitでなくboolを使用してください。
そうすれば、load data infileの入力ファイルでは、0や1としてデータを作成しておけばいいことになります。
    • good
    • 0

MySQLのバージョンは、何でしょうか?


MySQLでは、boolとtinyint(1)は同じ意味であり、trueやfalse、0や1を持ちます。
一方、bitはSQLとして定数で指定するなら、b'1'のように指定します。SQL上ではbool、tinyint(1)とbitの変換を自動的に行ってくれますが、load data infileの入力ファイルからは、b'1'といった定数として入れられないし、数値変換も自動的には行ってくれません。

マニュアルのload dara infileの説明にある、ユーザ変数の指定方法、set句の使い方で説明されています。

http://dev.mysql.com/doc/refman/5.1/ja/load-data …

LOAD DATA INFILE '/tmp/bit_test.txt'
INTO TABLE bit_test (@var1)
SET b= CAST(@var1 AS SIGNED);
    • good
    • 0

MySQLのbool値は、内部的には、数値の1,0が、それぞれtrue,falseとして保持されています。


ファイルから読み込む時も、"1"または 1 がtrueで、0 や ""空文字列は falseです。
コマンドラインのsql文上では、括り無しで true と書いても、1 に変換して内部処理していますが、ファイル読み込みで、true とかfalse とか書くと単純に文字列と見なされるので、範囲外のwarningがでるのでしょう。

この回答への補足

回答有難う御座います.
しかし上記方法は既に試行済みですし,Bit型の内部が0と1で構成されている事も了解しております.
念のために確認しましたが,やはり下記のようにWarning1264が出現しました.

Warning | 1264 | Out of range value adjusted for column 'bit' at row 1

補足するならば,他に1^1なども試しております.

補足日時:2009/05/30 13:00
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!