web-dev-qa-db-ja.com

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

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

今日、私はtinyint(2)のような整数を定義したテーブル、そしてint(4)int(6)のような他のものを見ることができます...

整数型とtinyint型のフィールドで、サイズはどういう意味ですか?

156
realtebo

表示幅を意味します

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

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

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

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

Atinyint(2)ゼロフィル

Btinyint(4)ゼロフィル

両方の列の値は1です。列Aの出力は_ b _の01および0001になります。下のスクリーンショットに見られるように、、:)

zerofill with displaywidth

59
AamirR

(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]を受け入れます。

207
Ja͢ck
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)
18
zloctb

INT、TINYINTについて。INTは4バイトの数字、TINYINTは1バイトの数字です。ここでより多くの情報 - 整数、INT、小さい、TINYINT、中間、BIGINT

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

数値型属性

13
Devart