MySql:Tinyint(2)とtinyint(1)-違いは何ですか?


183

私はmysqlでブール値をとして知っていましたtinyint (1)

今日、私は次のように定義された整数値を持つテーブルを参照tinyint(2)し、またなどのほかint(4)int(6)...

integerおよびtinyint型のフィールドでのサイズの意味は何ですか?


4
MySQL Integerデータ型については、こちらをお読みください
Bud Damyanov 2012年

2
@ AamirRの答えは正しいものである
evilReiko

1
@evilReikoも値が格納されているか、それはプレゼンテーションについて本当に年代に違いはありませんZEROFILL ...スペースやゼロは本当に芋誰の答えの正しさに差がありません
ジャック

回答:


94

表示幅を意味します

tinyint(1)とtinyint(2)のどちらを使用しても、違いはありません。

私は常にtinyint(1)とint(11)を使用し、いくつかのmysqlクライアント(navicat、sequel pro)を使用しました。

それは何も意味しません!私はテストを実行しましたが、上記のすべてのクライアント、またはコマンドラインクライアントでさえ、これを無視しているようです。

ただし、オプションを使用している場合、表示幅は最も重要です。ZEROFILLたとえば、テーブルに次の2つの列があるとします。

TINYINT(2)ZEROFILL

B tinyint(4)ゼロフィル

両方の列は1の値を有し、列のための出力Aがあろう010001のためにB以下のスクリーンショットで見られるように、:)

表示幅のあるゼロフィル


20
奇妙なことに、私はC#の公式MySQLコネクタでtinyint(1)が0と1以外の値を返さないことを発見しました。これはおそらくtinyint(1)が自動的にブール値として認識されることに関係しています。ヘッドアップするだけで問題になる場合があります。
Daniel Sharp

整数型と長さをできるだけ小さくした方がいいのではないですか?MySQLでこのメモリを節約した印象を受けました。
nclsvh 2018

@ Daniel-Sharpが指摘するように、それはコネクターにとって重要であるように見えるかもしれません。JDBCレポートを使用するHibernateで問題が発生しただけで、TINYINT(1)がBITとして解釈されました。
sfj

2
@DanielSharpこれはおそらく、デフォルトでtrueになっている接続オプションtinyInt1isBitが原因です。dev.mysql.com/doc/connector-j/8.0/en/…を
Parisbre56

1
これは、受け入れられる数値の量に関係があるといつも思っていました(たとえば、int(4)では9999を超える値は許可されていません)。私はいつも間違っていたと思います。PHPとMySQLの両方のコマンドラインで、上記の値が正常に表示されます。
ジョシュアバッカー

226

(m)列の表示幅を示しています。MySQLクライアントなどのアプリケーションは、クエリ結果を表示するときにこれを利用します。

例えば:

| v   | a   |  b  |   c |
+-----+-----+-----+-----+
| 1   | 1   |  1  |   1 |
| 10  | 10  | 10  |  10 |
| 100 | 100 | 100 | 100 |

ここではabおよびc使用しているTINYINT(1)TINYINT(2)TINYINT(3)それぞれ。ご覧のように、表示幅を使用して左側に値を埋め込みます。

これは、その特定のタイプの受け入れられる値の範囲に影響を与えないことに注意してください。つまり、TINYINT(1)まだ受け入れます[-128 .. 127]


16
「列幅」とはどういう意味ですか?
realtebo

8
@realteboこれは主に、表示のためにmysqlコマンドラインクライアントによって使用されます。
ジャック・

3
インターフェースに表示される「桁数」。つまり、左側にゼロが埋め込まれます。この種の機能は、データベースの初期の段階ではある程度理にかなっていましたが、現在は単なるレガシーです。
DenilsonSáMaia 2014

2
@Kailas MySQLクライアントを使用していない場合?まったくありません。
ジャック・

11
@カイラスいいえ!tinyint(1)は0-9のみを受け入れません。tinyintが保持できるすべての範囲を受け入れます。
ジャック

18
mysql> CREATE TABLE tin3(id int PRIMARY KEY,val TINYINT(10) ZEROFILL);
Query OK, 0 rows affected (0.04 sec)

mysql> INSERT INTO tin3 VALUES(1,12),(2,7),(4,101);
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM tin3;
+----+------------+
| id | val        |
+----+------------+
|  1 | 0000000012 |
|  2 | 0000000007 |
|  4 | 0000000101 |
+----+------------+
3 rows in set (0.00 sec)

mysql>

mysql> SELECT LENGTH(val) FROM tin3 WHERE id=2;
+-------------+
| LENGTH(val) |
+-------------+
|          10 |
+-------------+
1 row in set (0.01 sec)


mysql> SELECT val+1 FROM tin3 WHERE id=2;
+-------+
| val+1 |
+-------+
|     8 |
+-------+
1 row in set (0.00 sec)

11
回答を編集して、説明を含めてください。コードのみの回答は、将来のSOリーダーを教育するためにはほとんど機能しません。あなたの答えは低品質であるため、モデレーションキューに入れられています。
mickmackusa 2017

14

INT、TINYINTについて...これらは異なるデータ型です。INTは4バイトの数値、TINYINTは1バイトの数値です。詳細はこちら-INTEGER、INT、SMALLINT、TINYINT、MEDIUMINT、BIGINT

TINYINTデータ型の構文はTINYINT(M)です。Mは最大表示幅を示します(MySQLクライアントがサポートしている場合にのみ使用されます)。

数値型属性


1
「表示幅」とはどういう意味ですか!?
realtebo

2
参考資料-たとえば、INT(4)は、表示幅が4桁のINTを指定します。このオプションの表示幅をアプリケーションで使用すると、列に指定された幅よりも小さい幅の整数値を、スペースで左に埋め込むことによって表示できます。
Devart、

2
しかし、この機能を使用するアプリケーションやMySQLクライアントを見たことはありません。私は常にINT(11)を使用し、フォーマット関数を使用して出力をカスタマイズします。
Devart
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.