ジメジメする梅雨のお悩み、一挙解決! >>

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

このQ&Aに関連する最新のQ&A

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に関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QCSVからNULL値をインポート

phpMyAdminを使用してcsvからデータをインポートしようとしています。
通常の値は問題なくインポートできるのですが、NULL値があるフィールドがどうしても「0」になってしまいます。(そのフィールドはNULL値が入力可で、デフォルト値もNULLです)

csvからNULL値をインポートする方法をご教授下さい。

宜しくお願いします。

※\Nを入力するとNULLになるという情報があったため、
"1";"2";"3";"4";\N
"1";"2";"3";"4";"\N"
(1.2.3.4は適当な文字で、5番目をNULLにしたい)
の両方を試みましたが、入力結果は「0」でした。

phpMyAdmin - 2.10.2
MySQL クライアントのバージョン: 5.0.18
フィールド区切り記号 ;
フィールド囲み記号 ""

Aベストアンサー

"1";"2";"3";"4";NULL

でいけませんか?

QMySQLでデータベースにデータinsert時のエラー。

com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column '******' at row 1
とエラーがでて解決できません。どこがおかしいのでしょうか?(JAVA初心者ですいません。)

Aベストアンサー

私の場合ですが、データベース接続直後に
"SET NAMES SJIS;"
を実行すれば正常にINSERT出来ました。

なお、テーブルの作成時に文字コードをSJISにしておく必要があります。私は(cp932 -- SJIS for Windows Japanese)にしました。
後からテーブルの文字コードを修正してもうまくいきませんでした。

Q英語で「個数」「件数」は?

質問は単純です。
英語で「個数」や「件数」をなんというか、です。

とりあえず、思いついたのは、numberでした。
たとえば、「りんごの個数」は"a number of apples"ですか?
でも、"a number of"は「いくつかの」という意味ですよね。

「データの件数」は"a number of data"でしょうか?

私は英語はほとんど出来ませんが、numberは「個数」というよりも「番号」という意味であるような気がしてなりません。

Aベストアンサー

>「個数」や「件数」をなんというか、です。
>とりあえず、思いついたのは、numberでした。
意外に思われるかもしれまんせんが、語の選択はnumberであっています、と思います。

>「りんごの個数」
the number of (the) apples

>「データの件数」
the number of (the) data

>numberは「個数」というよりも「番号」という意味であるような気がしてなりません。
実は、昔、私も、「個数や件数はなんていうのかな、え、number? え、本当?」と、奇異に感じたことを、思い出しました。

Q複数のsubmitボタンで押されたボタンを取得する方法

form内の、submitボタンの値が拾えません。
1つだけsubmitボタンを設置すると値が拾えますが、
2つ以上submitボタンを設置すると拾えません。
仕様上、無理なのでしょうか?

<SCRIPT language="JavaScript">
function move_post(){
alert(document.frmMvPost.btn.value);
}
</SCRIPT>

<FORM name="frmMvPost" action="" method="post" onsubmit="return move_post()">
<INPUT type="submit" name="btn" value="テスト1">
<INPUT type="submit" name="btn" value="テスト2">
<INPUT type="submit" name="btn" value="テスト3">
</form>

Aベストアンサー

> alert(document.frmMvPost.btn.value);

btnというオブジェクトが複数あるため、btnは配列になってしまうため、
document.frmMvPost.btn.valueでは値が取れません。

回避策はonClickイベントにて値をHiddenへ格納すればOKです。

_____________________________________________________________

<SCRIPT language="JavaScript">
function move_post(){
alert(document.frmMvPost.onbtn.value);
}

function set_value(s_val)
{
document.frmMvPost.onbtn.value = s_val;
}

</SCRIPT>

<FORM name="frmMvPost" action="" method="post" onsubmit="return move_post()">
<INPUT type="submit" name="btn" value="テスト1" onClick="set_value('テスト1')">
<INPUT type="submit" name="btn" value="テスト2" onClick="set_value('テスト2')">
<INPUT type="submit" name="btn" value="テスト3" onClick="set_value('テスト3')">
<INPUT type="hidden" name="onbtn">
</form>

_____________________________________________________________


※テストしていないため動作は保証しません。問題ある場合にはお手数ですが何かしら手を加えてください。

> alert(document.frmMvPost.btn.value);

btnというオブジェクトが複数あるため、btnは配列になってしまうため、
document.frmMvPost.btn.valueでは値が取れません。

回避策はonClickイベントにて値をHiddenへ格納すればOKです。

_____________________________________________________________

<SCRIPT language="JavaScript">
function move_post(){
alert(document.frmMvPost.onbtn.value);
}

function set_value(s_val)
{
document.frmMvPost.onbtn.value = s_val;
}

</SCRIPT...続きを読む

QCSVファイルのインポートについて

宜しくお願いします。
CSVファイルをインポートしようとして、四苦八苦しています。item.csvというファイルをitemという名前のテーブルにインポートしようとしています。

load data local infile "item.csv" into table item fields terminated by ',';

とコマンドを入力すると、

The used command is not allowed with this MySQL version

というエラーが返されます。そこで、

load data infile "item.csv" into table item fields terminated by ',';

と入力すると、

Access denied for user: '****@localhost' (Using password: YES)

というエラーが返されます。
csvファイルの置き場所も解らないので、同じサーバの/public_html/test/php/csv/item.csvという位置と、/public_htmlよりもう一階層上のフォルダにitem.csvというファイルをアップしてあります。
相対パスやサーバがどの程度の階層まで検索してくれるのか解らないので、絶対パスでも指定してみましたが、全く同じエラーが返されてきました。
エラーの内容を翻訳してみたところ、

The used command is not allowed with this MySQL version
「使用されたコマンドは、このMySQL版で許されない」

Access denied for user: '****@localhost' (Using password: YES)
「ユーザー:『****@localhost』(パスワード:YESを使うこと)のために許されないアクセス」

という意味になりました。正直、どうすればいいのかさっぱりわかりません。この状況の打開策をご教授頂ければ助かります。何卒、宜しくお願い致します。尚、MySQLのバージョンはレンタルサーバの情報によると、「3.23.××以降」となっています。

宜しくお願いします。
CSVファイルをインポートしようとして、四苦八苦しています。item.csvというファイルをitemという名前のテーブルにインポートしようとしています。

load data local infile "item.csv" into table item fields terminated by ',';

とコマンドを入力すると、

The used command is not allowed with this MySQL version

というエラーが返されます。そこで、

load data infile "item.csv" into table item fields terminated by ',';

と入力すると、

Access denied for u...続きを読む

Aベストアンサー

インポートしようとしているテーブルに対してのfile権限が無いだけかな?
それとも、パスワードが間違ってるだけとか

MySQL 3.23.4 以降なら
show grants for ユーザ名
ってやって、file権限があるかどうか調べてくだされ

QSELECTで1件のみ取得するには?

こんにちわ。
いまORACLE9iを使用している者です。

ACCESSでは
SELECT TOP 1 項目名 FROM テーブル名
ORDER BY 項目名;
で並べ替えたデータ群のうち,先頭の1件だけを
取ることができますが,
ORACLEでそのような機能(SQL)はあるでしょうか?
教えてください。
よろしくお願いします。

Aベストアンサー

order by と rownum を併用する場合は注意が必要です。

[tbl01]
cola | colb
------------
1000 | aaaa
1001 | bbbb

というデータがある場合、
select cola from tbl01 where rownum < 1 order by cola desc;
とすると、「1001」ではなく、「1000」が返されます。
これは、order by の前に rownum < 1 が適用されてしまうからです。

解決するには、
select aaa from (select cola aaa from tbl01 order by cola desc) where rownum = 1;
とすれば良いです。

QSQL Server のキャラクターセット(内部文字コード)は何処で定義するのでしょうか?

SQL Server超初心者です。(Oracleについては約1年ちょっとの経験はあります)どうぞよろしくお願いします。
今回SQL Server2005 を使って簡単なシステムを構築する事になりました。
SQL Serverが扱う文字コートについて教えてください。
Oracleを使っていた時の経験としてDB内部のキャラクターセットと
クライアントで使う文字セット(NLS_LANG)を意識しておかないと、いろんな「文字化け」問題に遭遇した時に対応できませんでした。
きっとSQL Serverにおいても同じような事ではないかと思いここに質問させていただきます。
以下2点についてどなたかコメント願います。
1.(Oracleでいうキャラクターセット)はどこで定義するのでしょうか?
2.OracleでいうNLS_LANGに相当するものはあるのでしょうか?
 (ひょっとしたらマイクロソフト製品なのでサーバもクライアントもCP932固定なのでしょうか?)

根本的にはシステム構築する上で『極力文字化けに遭遇したくない』思い出このような質問をさせていただきました。
『文字化け』について注意点などありましたら合わせてコメントいただければ助かります。
以上よろしくお願いします。

SQL Server超初心者です。(Oracleについては約1年ちょっとの経験はあります)どうぞよろしくお願いします。
今回SQL Server2005 を使って簡単なシステムを構築する事になりました。
SQL Serverが扱う文字コートについて教えてください。
Oracleを使っていた時の経験としてDB内部のキャラクターセットと
クライアントで使う文字セット(NLS_LANG)を意識しておかないと、いろんな「文字化け」問題に遭遇した時に対応できませんでした。
きっとSQL Serverにおいても同じような事ではないかと思いここに質問...続きを読む

Aベストアンサー

Windowsのロケールの設定を日本語にした状態でSQLServerをインストールした場合、cp932がデフォルトの照合順序になります。照合順序については参考URLをご覧下さい。

SQLServerではわかりませんが、PostgresではJDBCドライバ部分で変換していたように記憶しています。ODBCドライバではAutoTranslateという機能があります。

このため、ODBC接続で何も考えずにvarcharを使用するとcp932になります。

参考URL:http://www.microsoft.com/japan/msdn/sqlserver/sql2005/bb330962.aspx

QTRUE/FALSEのデータ型

TRUE or FALSE のデータの場合(例えばフラグ類)、皆さんどのようなデータ型にしていますか?
ENUM型とBOOLEAN型(TINYINT(1))の違いはどのような所で出るのでしょうか?

Aベストアンサー

>どのデータ型が一般的なのかな

数値のデータ型を使用し、0と1を格納しているケースもあれば、文字型で'Y'や'N'を格納しているケースもあります。また、bool型を使用し、trueとfalseで区別しているケースもあります。

どれが「一般的か?」と言われれば、ケース・バイ・ケースであったりするので、答えがないように思います。

MySQLに関しては、#1で回答したようにboolは不完全な状態での実装です。必ず1バイト確保されるので、データベース容量の削減というメリットはありません。

MySQLのシステムの表の定義を見てみると、tinyint(1)やboolでなく、enumを多用していることが分かります。

<表定義を知る例>
show create table mysql.user;

これを見ると、「MySQLに限っては、enumかな?」と感じます。

Q「以降」ってその日も含めますか

10以上だったら10も含める。10未満だったら10は含めない。では10以降は10を含めるのでしょうか?含めないのでしょうか?例えば10日以降にお越しくださいという文があるとします。これは10日も含めるのか、もしくは11日目からのどちらをさしているんでしょうか?自分は10日も含めると思い、今までずっとそのような意味で使ってきましたが実際はどうなんでしょうか?辞書を引いてものってないので疑問に思ってしまいました。

Aベストアンサー

「以」がつけば、以上でも以降でもその時も含みます。

しかし!間違えている人もいるので、きちんと確認したほうがいいです。これって小学校の時に習い以後の教育で多々使われているんすが、小学校以後の勉強をちゃんとしていない人がそのまま勘違いしている場合があります。あ、今の「以後」も当然小学校の時のことも含まれています。

私もにた様な経験があります。美容師さんに「木曜以降でしたらいつでも」といわれたので、じゃあ木曜に。といったら「だから、木曜以降って!聞いてました?木曜は駄目なんですよぉ(怒)。と言われたことがあります。しつこく言いますが、念のため、確認したほうがいいですよ。

「以上以下」と「以外」の説明について他の方が質問していたので、ご覧ください。
http://oshiete1.goo.ne.jp/kotaeru.php3?qid=643134

Q[MySQL]LOAD DATA INFILE一部レコードがスキップさ

[MySQL]LOAD DATA INFILE一部レコードがスキップされてしまう。

いつもお世話になっております。selfesteemです。

今回はMySQLについての質問です。

仕事である機関が提供するデータをMySQLで扱うのですが、上手くいかなくて困っています。
テキスト形式での提供で、読み込み用スクリプトが付属していました。

LOAD DATA LOCAL INFILE "ファイル名" INTO TABLE "テーブル名" ~
で読み込むのですが、一部の行がスキップされてしまいます。

Query OKとは出てきているのですが、すべてのレコードがどうしてもインポートできず、
Skipped: ~ のようにスキップされた旨のメッセージが表示されています。

いろいろ試行錯誤してみたのですが、どこに問題があるのかいまいちつかめないでいます。
このLOAD DATA INFILE~で読み込む場合にスキップされるケースというのはどのような場合が考えられるのでしょうか?

また、何行目がスキップされたのかや、スキップされた理由を詳しく調べることはできますでしょうか?
無知ですみませんが、本当に困っているので教えていただけると助かります。

よろしくお願いいたします。

[MySQL]LOAD DATA INFILE一部レコードがスキップされてしまう。

いつもお世話になっております。selfesteemです。

今回はMySQLについての質問です。

仕事である機関が提供するデータをMySQLで扱うのですが、上手くいかなくて困っています。
テキスト形式での提供で、読み込み用スクリプトが付属していました。

LOAD DATA LOCAL INFILE "ファイル名" INTO TABLE "テーブル名" ~
で読み込むのですが、一部の行がスキップされてしまいます。

Query OKとは出てきているのですが、すべてのレコードがどうしてもイ...続きを読む

Aベストアンサー

単純に考えるなら、こんな原因が考えられます。
・プライマリーキー、ユニークインデックスがあって重複行がスキップされた。
・カラムの型やNOT NULL制約に引っかかった
・文字コードや改行コードで、正常にインポートできない行があった
・一部のカラムのバイナリデータをロードしようとして正常に読み込めない
etc…

どちらにせよ、MySQLのバージョン、テーブル定義、読み込むファイルや作業手順等分からないことだらけですので、原因は判断できませんが…


人気Q&Aランキング

おすすめ情報