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と関連する良く見られている質問

Q日立 白くまくん 型番について

ネットで検索していると白くまくんシリーズの{S}シリーズに
RAS-S40T2 とう品番がありました。
HPで見てみると RAS-S40W という品番がありました、
エアコンの能力的には同じような感じでしたが、このRAS-S40T
という品番は年式がちがうということでしょうか??
ご存知の方がいらっしゃいましたら教えてください。
よろしくお願いします

Aベストアンサー

年式、外観 、機能面で 異なる部分がいくつか有るようです。

RAS-S40T2
http://kakaku.com/spec/21503011436/
RAS-S40W2
http://kakaku.com/spec/21503012420/

メーカサイトで 取説が DLできますから、
http://kadenfan.hitachi.co.jp/manual/search.phtml?F_class=07&F_name=01
詳細は、そちらで・・

Q#1062 - Duplicate entry '1' for key 'PRIMARY'

利用していた幾つかのテーブルの中身だけを消去してしまいました。

ダンプデータを取ってあったので、復元させようとしたら、
下記エラーとなりました。何回か試している内、最終的にはうまくいったのですが、下記エラーは、どういう意味だったのでしょうか。
#1062 - Duplicate entry '1' for key 'PRIMARY'

<補足>
・テーブル自体は消失していなかったので、データが消失したテーブル部分のみ、phpMyAdminのSQL欄にSQL文を書いて、テーブルごとにINSERT 文を実行した。

<知りたいこと>
・エラーの意味

Aベストアンサー

プライマリーキーに対して"1"というデータがすでに存在していて
競合してますってことですね

プライマリーキーはユニークを確保するための検索キーなので
同一値はもてません

Q目のくま(*_*)

くまには
青くま・茶くま
とかあるじゃないですか?!

このくまはなにくまですか?

コンシーラーを選ぶのに
いつもわからなくて
すごく困ってます。

教えてください(>_<)

Aベストアンサー

画像で見る限りは茶くまだと思います(^^;)

一番確かな確認方は十分な睡眠をとることです★

青くまは十分な睡眠をとることですぐ治ります★

Q「A列B列C列」 → 「A列C列B列」 に変更したい

連日ですみません…。
ご存知の方がいらしたら、よろしくお願いいたします。

「A列B列C列」 → 「A列C列B列」
のように、
すでに入っているデータは保持したまま変更したいのですが、
これは可能でしょうか?

Aベストアンサー

ALTER TABLE テーブル名 CHANGE COLUMN B列 B列 char AFTER C列

 ※B列 B列は、旧カラム名 新カラム名の意味
 ※charは、新カラムの型指定。これは必須のようです。旧と同じでよい。

か、

CREATE TABLE 新テーブル名 select A列,C列,B列 from 旧テーブル名

で、できます。
下のヤツは、PKなどインデックス類は自動付与されません。
スキーマとデータだけです。

ちなみにこの手の不明点は調べるのが簡単で、下記公式サイト(?)を辿れば答えが早いです。

参考URL:http://dev.mysql.com/doc/refman/4.1/ja/alter-table.html

Qくまのプーの曲名教えてください

すこし前にラジオできいたのですが「くまのプー くまのプー まるまるとした小さい熊、くまのプーくまのプーかわいい熊よー・・・」
というようなパラパラ調の曲のタイトル及びCD発売しているのか等分かる方教えてください。

Aベストアンサー

こんにちは。

日本語で歌われているのならキーヤキッスが歌っている『くまのプーさん』だと思います。
(・・・が、私がキーヤを聞かないので確信がないです^^;)

アルバム『ユーロ・de・キーヤ』(タイトル間違ってたらゴメンナサイ)か、
『J-EURO NON-STOP BEST』(多分こっちはノンストップCD)に
入ってます。


Rikosさんが言っている
『ユーロビート・ディズニー・プレゼンツ・Winnie the POOH』には
英語バージョン(こちらはKING&QUEENが歌ってます)が
2バージョン入ってます。(こっちは好きで聞いてますので間違いありません)

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くまを治す方法

くまを治す方法

私は寝ているときに半目あいているそうです(苦笑)
なのでいつも朝くまができています。。。
いろんな方法を使いながら、くまをなくそうとしているのですが。。。ぜんぜん効果がありません。。。
どうすればいいですか??

Aベストアンサー

半目開いて寝ることと、くまができることは何の因果関係もありません。
くまができる原因は基本的に次の3パターンです。

1.血行不良
2.色素沈着(くりーむしちゅーの有田さんみたいな)
3.ホリが深い(くぼみがあって影ができる)

寝不足でくまができる要因は上記のうち1に該当します。
起きていると目は心臓の上にあるので血流が悪く
血行不良によりくまができてしまいます。
別の言い方をすれば、起きていても寝転がってさえいれば
くまはできにくいということです。
半目開いていることとくまができることは関係がなく
ちゃんと寝ていれば問題ないはずです。

そうすると原因は2か3に絞られるわけですが
どうしても気になるのであれば皮膚科医等と一度相談することを
オススメします。

Q'PRIMARY KEY'と'UNIQUE()'の違いを教えて!

CREATE TABLE等で出てくる'PRIMARY KEY'と'UNIQUE()'の違いが分かりません。
どちらも他の行と同じ値を登録させないためのものと認識しています。
どのように使い分けるのでしょうか。

あとINDEX()について教えてください。
これは挿入や更新のたびに、INDEXにした列の値の順に整列され、探索が高速になるものと認識しています。
これは'PRIMARY KEY'や'UNIQUE()'の列に対してもやらないといけないのですか。
テーブルは'PRIMARY KEY'や'UNIQUE()'に設定した列の値を基に随時整列されていると思っていたのですが・・・。

あと複数の列へINDEX()を設定することはできるのでしょうか。
その場合、どの列の値が優先的に整列されるのでしょうか。
複数列へINDEX()を設定するCREATE TABLEの書き方を、よろしければ教えてください。

Aベストアンサー

>自分で調べるのと、人に聞くのと、どっちが早いかは、人によって違うと思います。それは私が判断します。

ここは、「自分なりに調べて、分からない部分を具体的に示して質問する」ことがルールになっています。
他人に調べてもらいたいなら、「はてな」の人力検索などを利用してみては?

>しかしINDEXについては色んな列に個別に設定できるのでまだ意味不明です
>CREATE TABLE test4(a INT, b INT, c INT, INDEX(a), INDEX(b, c));
>例えばこのようなテーブルを作成した場合、テーブル全体がどのように整列されるのか

テーブル自体は、整列なんてされませんよ?インデクス上で、キー値が整列されるだけです。
RDBMSによっては、primary keyにクラスタリングといった機能を持たせたりして、なるべくその近傍にデータを格納するといった機能を実装しているものもありますけど。

例えば、学生なり、社員などを管理するテーブルを考えてみましょう。
学生idや社員idは、一人に1個、その人を識別するためのものだから、primary keyにするでしょう。
また、それ以外に各人で一意にしたい情報があれば、uniqueを定義することになります。
また、氏名などは同姓同名がいる可能性があるので、もしそういったインデクスを定義する場合は、create table文のindex句、あるいはcreate index文で定義することになります。

なお、インデクスは、検索条件によるデータの絞込み、order by、group by、distinctなどで必要になるソートで「作業メモリやファイルを使用したソート抑止」などで活用できると、大きな性能向上ができます。その一方で、追加、削除、キー値の更新などでは、性能劣化になるため、無闇にインデクスを作成することは避ける必要があります。

次のリンクは、インデクスの構造、どういう操作で有効かについて、Oracleを例にした記事です。
http://itpro.nikkeibp.co.jp/article/COLUMN/20060113/227239/?ST=develop

次のリンクは、MySQLでのインデクスの有効利用方法などについて、マニュアル記載箇所です。
http://dev.mysql.com/doc/refman/5.1/ja/query-speed.html

参考URL:http://dev.mysql.com/doc/refman/5.1/ja/optimization.html

>自分で調べるのと、人に聞くのと、どっちが早いかは、人によって違うと思います。それは私が判断します。

ここは、「自分なりに調べて、分からない部分を具体的に示して質問する」ことがルールになっています。
他人に調べてもらいたいなら、「はてな」の人力検索などを利用してみては?

>しかしINDEXについては色んな列に個別に設定できるのでまだ意味不明です
>CREATE TABLE test4(a INT, b INT, c INT, INDEX(a), INDEX(b, c));
>例えばこのようなテーブルを作成した場合、テーブル全体がどのように...続きを読む

Qコンタクトにしたいけど目の下のくまが…

コンタクトにしたいんですけど、眼鏡を取るとくまが目立ってしまってコンタクトにできません。
右目が遠視の0.02で左目が近視の0.02と視力の差が激しいせいで目の下にくまができてしまって消えません。睡眠時間はちゃんと取ってるので多分眼球疲労のせいだと思います。
物心ついた頃からくまがありました。
目の下のくまを消すマッサージとか色々試したんですけど、全然消えません。
まだ未成年なので手術はできません。
目の下のくまを消す方法があったら教えてください。よろしくお願いします。

Aベストアンサー

もし目の下のくまが本当に眼精疲労のせいであれば、
コンタクトによって左右の視力差が解消されますから、
消えないまでも、徐々に薄れていくのではないかという気がします。

自分にあったコンタクトをするのであれば、コンタクトは眼鏡での生活に比べて「物を見る」ことからくる目の疲労が軽減されます。私は強度の近視+乱視ですが、コンタクトにしてから、眼精疲労から来る頭痛が解消され、その他の面でも、大変快適な生活を送ってきました。

とりあえずはお化粧でカバーしながら、コンタクトを試してみてもいいのではないでしょうか。

QMySqlに、\'の2つを含む文字を登録できません

PHP5.2
MySql5.1.34
文字コードSJIS

\'
の2つを含む文字を登録できません。

/".!%
は登録できます。

<?php

if(!$_POST['mes']){

print <<< html
ブログ記事を投稿
<form action="$PHP_SELF" method="post">
<table border="1">
<tr>
<td>日付</td>
<td>
<textarea rows="3" cols="20" name="created_at"></textarea>
</td>
</tr>
<tr>
<td>タイトル</td>
<td>
<textarea rows="3" cols="40" name="mes"></textarea>
</td>
</tr>
<tr>
<td>URL</td>
<td>
<textarea rows="3" cols="60" name="url"></textarea>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="書き込む">
</td>
</tr>
</table>
</form>
html;

}else{

$dbcon = mysql_connect("サーバ","ユーザ名","パスワード");

mysql_set_charset("sjis",$dbcon);

mysql_select_db("データベース名");

$today = date("Y/m/d H:i:s");
$created_at = str_replace("\r\n", "", $_POST['created_at']);
$mes = str_replace("\r\n", "", $_POST['mes']);
$url = str_replace("\r\n", "", $_POST['url']);

$sql_mes = "insert into message(updated_at,created_at,mes,url) values('" . $today . "','" . $created_at . "','" . $mes . "','" . $url . "')";

$result_mes = mysql_query($sql_mes);
mysql_close($dbcon);

print "記事の投稿が完了しました。<br>";

}

?>

PHP5.2
MySql5.1.34
文字コードSJIS

\'
の2つを含む文字を登録できません。

/".!%
は登録できます。

<?php

if(!$_POST['mes']){

print <<< html
ブログ記事を投稿
<form action="$PHP_SELF" method="post">
<table border="1">
<tr>
<td>日付</td>
<td>
<textarea rows="3" cols="20" name="created_at"></textarea>
</td>
</tr>
<tr>
<td>タイトル</td>
<td>
<textarea rows="3" cols="40" name="mes"></textarea>
</td>
</tr>
<tr>...続きを読む

Aベストアンサー

登録時にエスケープしましょうね。

http://www.php.net/manual/ja/function.mysql-real-escape-string.php

シングルクォーテーション、\は、MySQLで利用される文字なので、
ちゃんとエスケープしてあげないと登録ができないだけではなく、
データ破壊や盗難に繋がります。


人気Q&Aランキング

おすすめ情報