人に聞けない痔の悩み、これでスッキリ >>

テーブルを作成する際、
int(1)とtinyintは両方1バイトですが、
どちらで作成した方が良いでしょうか?

A 回答 (1件)

>int(1)とtinyintは両方1バイトですが、



違います。
intは4バイト、tinyintは1バイトです。

http://dev.mysql.com/doc/refman/4.1/ja/storage-r …
    • good
    • 0
この回答へのお礼

ありがとうございます。
intで桁数を1桁に指定しても容量は変わらず、
tinyintに型を変更し容量を減らす事ができました。

お礼日時:2007/11/15 11:23

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

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

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

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

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かな?」と感じます。

Qforeachで回った数を表示したい

単純な質問ですみません。
====
//getTestlistは別ファイルで定義済み。
<?
$testlist=getTestlist();
foreach($testlist as $test){
?>


<? } ?>
====
例えば↑こんなふうにforeachで$testlistが存在するだけ回したとします。
そのときに何回まわったか?($testが何件あったか?)だけを表示したいのですが、そんなことってできますか?
表示したい位置は<? } ?>の外側にと考えています。
あさってな質問でしたらすみません。
phpVer 4.3

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

Aベストアンサー

<?
$testlist=getTestlist();
$n=0;
foreach($testlist as $test){
$n++;
?>
<?}?>

<?=$n?>回
とかでよいかと思います。

途中でbreakなどが無ければ
<? echo count($testlist) ?>でも良いかも知れません。

QデータベースのINT型項目にNULLはNG?

以前、知り合いからデータベースのINT型の項目には出来ればNULLを許可しない(NOT NULL)方がいいと聞いたことがあるのですが、本当でしょうか?

現在不動産の物件データを登録するためのシステムを作成しており、
データベースの設計を行なっている最中なのですが、
例えば金額や面積など数字しか入力されない項目はINT型にしたいと考えています。
※データベースはMySQLになります。

ただし、
物件データ登録時に数字項目に何も入力されなければ「NULL」、
0以上の数値を入力されている場合にはそのままその数値をデータベースに登録したいと考えています。
※0を入力されている場合には「0」をそのまま入れたいです。

INT型の項目にはNULLを入れるのを避けた方がいい場合には、0を入れるような仕様に変更しようと考えているのですが、その辺のことについて教えて頂けると助かります。

ざっくりとした質問で申し訳ございませんが、宜しくお願い致します。

Aベストアンサー

物件データ登録時に数字項目に何も入力されなければ「NULL」、0を入力されている場合には「0」
本来の意図としては正しいはずです。
Nullは本来、どの値を入れればいいのかわからない値ということなので、
数字がわからない=何も入力していない ということで、Nullを指定するのは正しいはずです。
しかし、
実際に使うときには、Nullは実に不自由なので、
Nullは使うなという話がでてきます。
## 私なら、入力区分 0=未入力、1=入力 と 数値(未入力は0)と別々に持つかもしれません。

というのは例えば、
金額 100万以上の物件は何件?
というSQLに対して、100件と答えがでて、
金額 100万未満の物件は何件?
というSQLに対して、50件と答えがでたとします。
じゃあ、全物件は?・・・172件だったりします。
何故?⇒Nullが22件だったためです。
(Nullは0とは違い、どちらの検索条件にも含まれません。)
・・・この不自由さを回避するために数値項目に、Not Null制約をつけることが多いです。

Q学校の課題のSQLでVIEWの意味と作成方法がわかりません。

学校でSQLを使って、データベースを作るという期末課題がでました。

当方バイクの知識が少々あるため、バイクとバイク販売店というデータベースを作ってみることにしました。

バイクのデータ100個分とお店のデータは10個ほどなのですが、課題の条件の中にVIEWを作成すること、とあるのですが、VIEWとは何者なのでしょうか?
授業のページを見ても、難しい事しか載っていなくて困っています。

またテーブルの入力と、データの入力はなんとか覚えたのですが、VIEWの作り方は全く意味がわかりません。なので・・・

VIEWの意味と役割を教えてください。
初心者なので出来るだけわかりやすく教えていただけたら幸いです。
またVIEWの作成方法(create viewだとかなんとか・・・)を教えてください。
ちなみにテーブルデータとかはこんな感じに作っております。なのでこんな感じでVIEWの作成方法をご教授いただけたらありがたい次第です。
create table bike(
  maker text,
name text,
size int,
nennshiki date,
kaizou text,
shaken text,
nedann float,
shop text
)

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

学校でSQLを使って、データベースを作るという期末課題がでました。

当方バイクの知識が少々あるため、バイクとバイク販売店というデータベースを作ってみることにしました。

バイクのデータ100個分とお店のデータは10個ほどなのですが、課題の条件の中にVIEWを作成すること、とあるのですが、VIEWとは何者なのでしょうか?
授業のページを見ても、難しい事しか載っていなくて困っています。

またテーブルの入力と、データの入力はなんとか覚えたのですが、VIEWの作り方は全く意味がわか...続きを読む

Aベストアンサー

#1回答者です。

バイクは詳しくないので、自動車の例で説明します。

一つの表で、メーカー名や車種名などを管理すると、冗長な情報を管理することになってしまいます。

=====表定義例=====
create table メーカー
(メーカーid smallint primary key,
メーカー名 varchar(16));

create table 車種
(メーカーid smallint,
車種id smallint,
車種名 varchar(30),
primary key(メーカーid,車種id));

create table 型名情報
(メーカーid smallint,
車種id smallint,
型名 varchar(30) primary key,
年式 smallint,
排気量 smallint,
定価 int);
create index 型名情報idx on 型名情報(メーカーid,車種id);
=====ここまで=====

このように分けることで、メーカー名を車の情報分、持たなくてすみます。
仮にメーカー名が変更になった場合は、「メーカー」表のみを更新すればよくなります。

「マーチ」といった車種で、いろいろな年式があるでしょうから、車種名と年式といった情報も、表を分けます。

このようにして置くと、情報変更時の更新箇所が限られるし、メーカーの検索、車種名の検索といったことが容易に行えます。

=====データ例=====
insert into メーカー values(1,'TOYOTA');
insert into メーカー values(2,'NISSAN');
insert into メーカー values(3,'HONDA');

insert into 車種 values(1,1,'カローラ XXXX');
insert into 車種 values(1,2,'クラウン XXXX');
insert into 車種 values(2,1,'スカイライン XXXX');
insert into 車種 values(2,2,'マーチ');
insert into 車種 values(3,1,'アコード');

insert into 型名情報 values(1,1,'ABC-DEF-1234',2003,1600,150);
insert into 型名情報 values(1,1,'ABC-DEF-1240',2005,1600,160);
insert into 型名情報 values(1,2,'ABC-XYZ-1111',2005,2000,250);
insert into 型名情報 values(2,1,'EFGH-IJK-LMN-12',2002,2000,200);
insert into 型名情報 values(2,2,'HIJK-LMN-OPQ-20',2005,1600,120);
insert into 型名情報 values(3,1,'XY-ZABC-DE-12345',2003,2000,200);
=====ここまで=====

いよいよ検索です。
三つに分けた表から、メーカー名や車種名、年式といった情報を検索します。

=====検索SQL例=====
select x.メーカー名,y.車種名,年式,排気量,定価
from (メーカー as x
left join 車種 as y
on x.メーカーid=y.メーカーid)
left join 型名情報 as z
on y.メーカーid=z.メーカーid and y.車種id=z.車種id;
=====ここまで=====

少し複雑になってしまいました。
これをビューにして登録しておき、検索SQLは簡単に記述できるようにしてしまいます。

=====ビュー定義例1=====
create view 車検索
as
select x.メーカー名,y.車種名,年式,排気量,定価
from (メーカー as x
left join 車種 as y
on x.メーカーid=y.メーカーid)
left join 型名情報 as z
on y.メーカーid=z.メーカーid and y.車種id=z.車種id;
=====ここまで=====

このビューを利用して検索する場合、検索SQLは以下のように簡単に記述できます。

=====ビューを使った検索1=====
select * from 車検索;
=====ここまで=====

ビューで、特定のデータのみ見せる(他のデータは見せない)ことが可能です。
例えば上述のビューを「TOYOTA」の車種のみを見せるビューに変えてみます。

=====ビュー定義例2=====
drop view 車検索;
create view 車検索
as
select x.メーカー名,y.車種名,年式,排気量,定価
from (メーカー as x
left join 車種 as y
on x.メーカーid=y.メーカーid)
left join 型名情報 as z
on y.メーカーid=z.メーカーid and y.車種id=z.車種id
where x.メーカー名='TOYOTA';
=====ここまで=====

以下の検索(「ビューを使った検索1」と同じ)を行うと、今度は「TOYOTA」の車種しか見えなくなります。

=====ビューを使った検索2=====
select * from 車検索;
=====ここまで=====

このようにビューを使うと、特定のデータだけ見せたり、SQLを簡単にできるといったメリットがあります。

#1回答者です。

バイクは詳しくないので、自動車の例で説明します。

一つの表で、メーカー名や車種名などを管理すると、冗長な情報を管理することになってしまいます。

=====表定義例=====
create table メーカー
(メーカーid smallint primary key,
メーカー名 varchar(16));

create table 車種
(メーカーid smallint,
車種id smallint,
車種名 varchar(30),
primary key(メーカーid,車種id));

create table 型名情報
(メーカーid smallin...続きを読む

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)にしました。
後からテーブルの文字コードを修正してもうまくいきませんでした。

Qhtml で 変数を定義できますか?

html(できればjava不使用)で変数に文字列をいれてつかう、またはそれに近いことはできないでしょうか?

例**************************
$color1="#000000"

<tr bgcolor=$color1>内容1<tr>
<tr bgcolor=$color1>内容2<tr>
****************************
みたいな感じです

Aベストアンサー

調べりゃ分かることは???だけど。

CSS2で無理やり作れば・・簡単だけど・・・
生成内容、自動番号振り、リスト ( http://www.swlab.it.okayama-u.ac.jp/man/rec-css2/generate.html )
 本来はXSLTで作るほうがよいかと・・・
 <th><xsl:value-of select="parson" />の歌</th>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="ja">
<head>
<meta http-equiv="content-type" content="text/html; charset=Shift_JIS">
<title>サンプル</title>
<meta name="author" content="ORUKA1951">
<meta http-equiv="Content-Style-Type" content="text/css">
<link rev="made" href="mailto:orika1951@hoge.com" title="send a mail" >
<link rel="START" href="../index.html">
<style type="text/css">
<!--
.parson1:before{content:"田中";}
p.age1:after{content:"36歳";}
-->
</style>
</head>
<body>
<h1>サンプル</h1>
<p class="parson1">は男の子</p>
<p class="parson1 age1">の年齢は</p>
<p>私の彼氏は<span class="parson1">君だよ</p>
</body>
</html>

調べりゃ分かることは???だけど。

CSS2で無理やり作れば・・簡単だけど・・・
生成内容、自動番号振り、リスト ( http://www.swlab.it.okayama-u.ac.jp/man/rec-css2/generate.html )
 本来はXSLTで作るほうがよいかと・・・
 <th><xsl:value-of select="parson" />の歌</th>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="ja">
<head>
<meta http-equiv="content-type" content="text/html; charset=Shift_JIS">
<title>サンプル</title>
<met...続きを読む

Q空の文字列とnullと""

java初心者です。
空の文字列とnullと""の3つの関係がよくわかりません。

TextFieldを使った簡単なプログラムを作りました。そこで、”TextFieldに何も入力されていないこと”を判定する文を書こうと思ったのですが、どう書けばいいのか迷いました。

TextFieldのオブジェクトをtfとして、tf.getText()==""かtf.getText()==nullで大丈夫だと思いましたが、実行してみると、どちらを用いても判定できませんでした。結局、tf.getText().length()==0で判定できました。そこで、リファレンスを見ると、getText()はデフォルトで空の文字列を返すと、書いてありました。

したがって、「""とnullは空の文字列とは異なる」という理解に至ったのですが、では空の文字列とは何なのかという疑問がわいてきました。

また、自分は""とnullの違いもよくわかっていません。""とnullが異なるものである、ということはわかるのですが・・・

質問をまとめると
・空の文字列とは何なのか?
・空の文字列は""やnullとどう違うのか?
です。よろしくお願いします。

java初心者です。
空の文字列とnullと""の3つの関係がよくわかりません。

TextFieldを使った簡単なプログラムを作りました。そこで、”TextFieldに何も入力されていないこと”を判定する文を書こうと思ったのですが、どう書けばいいのか迷いました。

TextFieldのオブジェクトをtfとして、tf.getText()==""かtf.getText()==nullで大丈夫だと思いましたが、実行してみると、どちらを用いても判定できませんでした。結局、tf.getText().length()==0で判定できました。そこで、リファレンスを見ると、getText()はデフ...続きを読む

Aベストアンサー

tf.getText() == ""
では、オブジェクト比較になってしまうので、当然NGです。

"".equals(tf.getText())

とすれば良いでしょう。

空文字と呼ばれているものは、""と同じですよ。
Stringクラスで考えると、インスタンス化がされているが、中身の文字列が""の状態にあります。

nullは、そもそもオブジェクトすら設定されていない状態です。
例えばStringBufferクラスの変数を宣言しても、インスタンス化されていない状態、それがnullです。

Q日付型のフィールドに空白を入れる方法を教えてください

ASP(VBScript)でSQLサーバにINSET INTO文を使ってデータを格納しているのですが、日付の部分がNULLの時、「1900/1/1」が入ってしまいます。
そのまま、空白を入れる方法はどうやったらよろしいのでしょうか?

TABLE1の内容は
番号|内容|日付です。

INSERT INTO TABLE1 VALUES ( 1, 'あいう', '')

結果
1|あいう|1900/1/1

Aベストアンサー

あとは、プログラムの書き方次第ですね、、、


If hensu=Null Or hensu="" Then
dt = "NULL"
Else
dt = "'" & hensu & "'"
End IF

E_SQL = "INSERT INTO TABLE1 VALUES & _
"( 1,'あいう', " & dt& ")"
の様に書きます。

QIOException ってどういうときに起こるのでしょうか?

IOException ってどういうときに起こるのでしょうか?

http://www.atmarkit.co.jp/fjava/rensai2/javaent12/javaent12.html
を見て勉強しています。

  catch ( IOException e) {
    System.out.println( "キーボードが故障しているのかもしれません" );
  }

と書いてあります。
ハード(キーボード)が故障しているのを Java のプログラムのレベル(ソフトウェア)で感知できるというのがよくわかりません。「

NumberFormatException の方はわかるのですが・・・

Aベストアンサー

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接続だったりするわけですけど、
InputStreamは、その入力元の情報を持っていないので、
データを読み取る際は常に
IOExceptionをキャッチするコードを書かなくてはいけません。
たとえ、絶対にIOエラーが発生しないストリームだとしても。

さらに付け加えるなら、
そもそも「標準入力=キーボード」であるとは限りません。
(一般的にはキーボードであることが多いですが。)
Javaでは、
System.setIn(InputStream)
を呼び出して、標準入力を変えてしまうことができますし、
標準入力を指定してプログラムを実行することができるOSもあります。

追伸1:
例外をキャッチしたときは、
スタックトレースをプリントすることをおすすめします。
catch (IOException e) {
e.printStackTrace();
}

追伸2:
そのプログラムでIOExceptionを発生させる最も簡単な方法は、
readLine()を呼び出す前に
標準入力(System.in)を閉じてしまうことです。
System.in.close();

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接...続きを読む

Qvarchar(M)のMは文字数ですかバイト数ですか?

os:ターボlinuxです。

varchar属性にvarchar(10)と指定すると10文字入ると思っていたのですが、全角で入力すると5文字、半角で10文字でした。

マニュアル6.2のカラム型によると、
M の範囲は 0 〜 255 文字とあります。

TINYBLOB , TINYTEXT は最大長が 255(2^8 - 1)文字
BLOB , TEXTは 最大長が 65535(2^16 - 1)文字
MEDIUMBLOB , MEDIUMTEXTは 最大長が 16777215(2^24 - 1)文字

そして
LONGBLOB , LONGTEXT は最大長が 4294967295 または 4G(2^32 - 1)バイト

となっています。

LONGだけが「バイト」という表現、それ以外はvarcharも含めて文字数という表現なので、当然文字数でカウントしていると思っていたので完全に計算が狂いました。


これはマニュアルが間違えているのでしょうか?

それとも、文字コードによって変わるのでしょうか?
その場合、どの文字コードがバイト換算でどの文字コードが文字数換算なのでしょうか?
また、MySQLでどの文字コードが使用されているかどこを見れば分かるのですか?

となたかご教授下さい。

os:ターボlinuxです。

varchar属性にvarchar(10)と指定すると10文字入ると思っていたのですが、全角で入力すると5文字、半角で10文字でした。

マニュアル6.2のカラム型によると、
M の範囲は 0 〜 255 文字とあります。

TINYBLOB , TINYTEXT は最大長が 255(2^8 - 1)文字
BLOB , TEXTは 最大長が 65535(2^16 - 1)文字
MEDIUMBLOB , MEDIUMTEXTは 最大長が 16777215(2^24 - 1)文字

そして
LONGBLOB , LONGTEXT は最大長が 4294967295 または 4G(2^32 - 1)バイト

となっています...続きを読む

Aベストアンサー

>百歩譲って間違いではないとしても、著しく不備があるとは言えますね。
翻訳されたものなら仕方ないと思います。でも、確かに少しくらい注釈が有った方が親切かもしれませんね。

>これは使用する文字コードによって変わるのでしょうか?
>その場合、どの文字コードがバイト換算でどの文字コードが文字数換算なのでしょうか?
同じ文字コード内でも文字によって必要とされるバイト数が違いますから、マニュアルで文字単位で記されている物をバイトで考えた方がいいと思います。
255文字→255バイト

MySQLでの文字コード確認方法はこちら。
http://www.javadrive.jp/mysql/control/index1.html

参考URLは文字コードについてのページです。

参考URL:http://ash.jp/code/code.htm


人気Q&Aランキング