ホームページ  >  記事  >  データベース  >  mysqlのTINYINTの値の範囲は何ですか

mysqlのTINYINTの値の範囲は何ですか

WBOY
WBOY転載
2023-06-03 18:58:474142ブラウズ

プロジェクト シナリオ:

最近開発プロセス中に、テーブル設計に Thinint フィールドがあることに気づきましたが、その範囲について興味を持ちました

mysqlのTINYINTの値の範囲は何ですか

質問の説明:

128 を超える値を入力すると、このフィールドに次のエラーが報告されます

mysqlのTINYINTの値の範囲は何ですか

#原因: com.mysql .jdbc.MysqlDataTruncation:データ切り捨て:行 1 の列 'priority' の値が範囲外です;

原因分析:

-2^7 (-128) から 2 ^7 - 1 (127) の整数データ。格納サイズは 1 バイトです (UNSIGNED 符号なし型には設定されません)。
したがって、テーブルを構築するとき、実際に効果があるのは tinyint(3) だけであり、たとえ tinyint(100) を構築したとしても、最大でも 3 桁になります。

ここでは、tinyint にそのような制限がある理由に関する一般的な科学をいくつか紹介します。

MySQL の Tinyint データ型の値の範囲は、-128 ~ 127 で署名されます。0 ~ 255符号なし範囲内の値の範囲です。公式の「MySQL 5.1 リファレンス マニュアル」で確認できます。

Tinyint は 1 バイトの記憶領域、つまり 8 ビットを占有します (少し)。では、Tinyint の値の範囲はどこから来るのでしょうか?
最初に署名されていないケースを見てみましょう。符号なしの最小値は、8 ビットすべてが 0 であり、10 進数に変換すると 0 になります。したがって、符号なし Tinyint の最小値は 0 です。符号なしの最大値は、8 ビットすべてが 1、11111111 で、10 進数に変換されます。 255です。これはわかりやすいですね。
signed Tinyint の値の範囲はどのようにして得られるのでしょうか?コンピューターでは、シンボルを表すために最上位ビットが使用されます。 0 は正を表し、1 は負を表し、残りは数値を表します。次に、符号付き 8bit
最小値:
1 1 1 1 1 1 1 1 = -127 (負の値を表す)
最大値:
0 1 1 1 1 1 1 1 = 127 (正の値を示します)

#なぜ最小符号付き値が -128 ではなく -127 なのでしょうか?ここがこの記事のポイントですが、コンピュータでは負の値は補数コードで表現されます
なぜ符号付き TINYINT の最小値は -128 なのでしょうか? 「-0」も「0」ですが、正負補数体系によれば、「-0」の補数は「0」とは異なるため、2つの補数で数値を表す場合があります。数字の1の補数を1つ1つ対応させるために、「0」は必ず「0」で表現しなければならないと人為的に定められています。同時に、リソースを最大限に活用するために、本来「-0」を表す補数コードを-128を表すように指定しています。

#追加のナレッジ ポイントの拡張#mysql の int、bigint、smallint、tinyint の主な違いの簡単な紹介

最近 MySQL データベースを使用していると、主に int、bigint、smallint、tinyint などのさまざまな数値型に遭遇します。さらにわかりにくいのは、int と smallint の違いです。これはブログに書き留めておきます:
整数データの正確な数値データ型を使用してください。
bigint-2^63 (-9223372036854775808) から 2^63-1 (9223372036854775807) までの整数データ (すべての数値)。記憶サイズは8バイトです。

##int

-2^31 (-2,147,483,648) ~ 2^31 – 1 (2,147,483,647) (すべて数値) の整数データ。記憶サイズは4バイトです。 SQL-92 の int の同義語は integer です。

smallint

-2^15 (-32,768) から 2^15 – 1 (32,767) までの整数データ。記憶サイズは2バイトです。

tinyint

0 ~ 255 の整数データ。記憶サイズは1バイトです。
補足:
bigint データ型は、整数値がサポートされている場合にサポートされます。ただし、bigint は特殊な場合に使用されます。整数値が int データ型でサポートされる範囲を超える場合は、bigint を使用できます。 SQL Server では、int データ型が主な整数データ型です。 データ型の優先順位表では、bigint は smallmoney と int の間にあります。
この関数は、パラメーター式が bigint データ型である場合にのみ bigint を返します。 SQL Server は、他の整数データ型 (tinyint、smallint、および int) を自動的に bigint に昇格しません。
int(M) 整数データ型では、M は最大表示幅を表します。 int(M) では、M の値は int(M) が占める記憶域の量とは関係がありません。 int(3)、int(4)、および int(8) はすべて、ディスク上の 4 バイトの記憶領域を占有します。

解決策:

主な解決策は 3 つあります

1. データ テーブルのフィールドを変更します (int または他の型に変更します)

2. フロントエンドを調整します入力ボックス 値がその値を超えると、ポップアップ プロンプトが表示されます (不親切)
3. バックエンドの値が検証され、一致しない場合は例外プロンプトがスローされます (私が使用した 3 番目の方法) )
rree

以上がmysqlのTINYINTの値の範囲は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。