• 締切済み

LOAD DATE INFILE で Bit(1)型の列にTrueを入れる際に何故かwarningが出る

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を入力する方法を教えて頂けませんでしょうか. 宜しくお願いします.

みんなの回答

回答No.3

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

回答No.2

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.html LOAD DATA INFILE '/tmp/bit_test.txt' INTO TABLE bit_test (@var1) SET b= CAST(@var1 AS SIGNED);

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.1

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

pengin001
質問者

補足

回答有難う御座います. しかし上記方法は既に試行済みですし,Bit型の内部が0と1で構成されている事も了解しております. 念のために確認しましたが,やはり下記のようにWarning1264が出現しました. Warning | 1264 | Out of range value adjusted for column 'bit' at row 1 補足するならば,他に1^1なども試しております.

関連するQ&A