MySQLの整数データ型tinyintの詳細な説明

MySQLの整数データ型tinyintの詳細な説明

1.1 tinyint型の説明

データ型表示長さ占有バイト数署名済み署名なし
ちっちゃいプラス符号なし/ゼロフィル: 3
符号なし/ゼロフィルなし: 4
1(8ビット) -128 から 127 0から255
#### フォーマット id tinyint(M) [unsigned] [zerofill]
フィールド名 データ型 (表示長、指定なし) 符号なし 先頭にゼロが付いた符号なし #### tinyint の最大値はどのように取得されますか? Tinyint は 1 バイトを占め、1 バイトは 8 ビットを占め、変換後 (2 の 8 乗から 1 を引いた値) は 255 になります。

#### unsigned の追加について unsigned 属性を追加した後は、unsigned になります (範囲は 0 から 255 までの整数です。整数なので、符号 "-" は付かず、unsigned になります)

#### ゼロフィルの追加について ゼロフィル属性は unsigned 属性も持ち込むため、符号なしになります (範囲は 0 ~ 255、表示長は 3)。同時に、先頭のゼロが埋められます (値が表示長に達しません。たとえば、1 を挿入すると、001 が表示されます)。

#### 符号なしとゼロフィルのない説明フィールド これらの 2 つの属性のどちらもフィールドの後に追加されていない場合は、符号付きであることを意味します (範囲は -128 ~ 127 で、符号 "-" があるためすべてが符号付きです)。

1.2 練習環境の説明

#### データベースのバージョンとデフォルトのストレージエンジン mysql> select @@version,@@default_storage_engine;
+------------+---------------------------+
| @@バージョン | @@default_storage_engine |
+------------+---------------------------+
| 5.7.28-ログ | InnoDB |
+------------+---------------------------+
セット内の 1 行 (0.00 秒)
 
 
#### chenliang データベースを作成します。mysql> create database if not exists chenliang;
クエリは正常、1 行が影響を受けました (0.03 秒)
 
mysql> 「chenliang」のようなデータベースを表示します。
+----------------------+
| データベース (chenliang) |
+----------------------+
| チェンリャン |
+----------------------+
セット内の1行(0.03秒)
 
 
#### chenliang データベースに入り、データベースに正常に入ったかどうかを確認します。mysql> use chenliang;
データベースが変更されました
 
mysql> データベースを選択します();
+------------+
| データベース() |
+------------+
| チェンリャン |
+------------+
セット内の1行(0.01秒)


#### トランザクションが自動的にコミットされるかどうかを確認します。mysql> select @@global.autocommit;
+---------------------+
| @@global.autocommit |
+---------------------+
| 1 |
+---------------------+
セット内の 1 行 (0.00 秒)

1.3 未署名属性の追加

1.3.1 SQLモードで厳密モードをオンにする

SQL_MODEで厳密モードが有効になっている、つまりSQL_MODEパラメータにSTRICT_TRANS_TABLESパラメータが含まれている

#### セッションモードのsql_modeを設定してstrict_trans_tablesを含める
mysql> セッション sql_mode を "STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION" に設定します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
 
mysql> @@sql_mode\G を選択
************************** 1. 行 ****************************
@@sql_mode: STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION
セット内の 1 行 (0.00 秒)


#### test1 テスト テーブルを作成します (ここでは UNSIGNED が指定されており、これは符号なしを意味します)
mysql> テーブルが存在しない場合は test1( を作成します
    -> id tinyint UNSIGNED
    ->)engine=innodb 文字セット utf8 照合 utf8_general_ci;
クエリは正常、影響を受けた行は 0 行 (0.06 秒)
   
  ## id フィールドの型は tinyint unsigned で、範囲は 0 ~ 255、長さは 3 です。255 の長さは 3 だからです。


#### test1 のテーブル構造を表示します。mysql> desc test1;
+-------+---------------------+------+-----+--------+-------+
| フィールド | タイプ | Null | キー | デフォルト | 追加 |
+-------+---------------------+------+-----+--------+-------+
| id | tinyint(3) 符号なし | YES | | NULL | |
+-------+---------------------+------+-----+--------+-------+
セット内の1行(0.03秒)


#### 0 から 255 の範囲の整数とこの範囲外の整数を挿入するテストmysql> insert into test1 values(-1); # 値 -1 を挿入するとエラーが発生します (0 から 255 の範囲外です)
エラー 1264 (22003): 行 1 の列 'id' の値が範囲外です
 
mysql> insert into test1 values(0); # 値 0 を挿入します (通常、0 から 255 の範囲)
クエリは正常、1 行が影響を受けました (0.06 秒)
 
mysql> insert into test1 values(255); # 値255を挿入します。通常値です(0~255の範囲)。
クエリは正常、1 行が影響を受けました (0.05 秒)
 
mysql> insert into test1 values(256); # 値 256 を挿入、エラー (0 から 255 の範囲外)
エラー 1264 (22003): 行 1 の列 'id' の値が範囲外です
mysql> test1 から * を選択します。
+------+
|id|
+------+
| 0 |
| 255 |
+------+
セット内の 2 行 (0.00 秒)

1.3.2 SQLモードが厳密モードではない

SQL_MODE は厳密モードを有効にしません。つまり、SQL_MODE パラメータに STRICT_TRANS_TABLES パラメータが含まれていません。

#### sql_mode に strit_trans_tables 変数が含まれないようにセッション モードを設定します。mysql> set session sql_mode="NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";
クエリは正常、影響を受けた行は 0 行、警告は 1 件 (0.00 秒)

mysql> @@sql_mode\G を選択
************************** 1. 行 ****************************
@@sql_mode: NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION
セット内の 1 行 (0.00 秒)



#### test11 テーブルを作成します (ここでは UNSIGNED が指定されており、これは符号なしを意味します)
mysql> テーブルが存在しない場合は作成する test11(
    -> id tinyint 符号なし
    ->)engine=innodb 文字セット utf8 照合 utf8_general_ci;
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
  ## id フィールドの型は tinyint unsigned で、範囲は 0 ~ 255、長さは 3 です。255 の長さは 3 だからです。



#### test11 のテーブル構造を表示します。mysql> desc test11;
+-------+---------------------+------+-----+--------+-------+
| フィールド | タイプ | Null | キー | デフォルト | 追加 |
+-------+---------------------+------+-----+--------+-------+
| id | tinyint(3) 符号なし | YES | | NULL | |
+-------+---------------------+------+-----+--------+-------+
セット内の 1 行 (0.00 秒)



#### 0 から 255 までの範囲の整数とこの範囲外の整数の挿入をテストします。 mysql> insert into test11(id) values(-1);
クエリは正常、1 行が影響を受け、1 つの警告 (0.00 秒)
  ## 範囲内ではないため、挿入時にエラーは報告されません (sql_mode で厳密モードが有効になっていないため)
  ## テーブルに挿入されたデータは -1 ではなく 0 です
 
mysql> test11(id) に値(0) を挿入します。
クエリは正常、1 行が影響を受けました (0.01 秒)
    ## 範囲内ではテーブルに挿入された数値も 0 なので、エラーは報告されません。
 
mysql> test11(id) に値(255) を挿入します。
クエリは正常、1 行が影響を受けました (0.01 秒)
    ## 範囲内であり、テーブルに挿入された数値も 255 であるため、エラーは報告されません。
 
mysql> test11(id) に値(256) を挿入します。
クエリは正常、1 行が影響を受け、1 つの警告 (0.00 秒)
  ## 範囲内ではないため、挿入時にエラーは報告されません (sql_mode で厳密モードが有効になっていないため)
  ## テーブルに挿入されたデータは256ではなく255です
  
mysql> test11 から * を選択します。
+------+
|id|
+------+
| 0 |
| 0 |
| 255 |
| 255 |
+------+
セット内の 4 行 (0.00 秒)

1.4 ゼロフィル属性を追加する

1.4.1 SQLモードで厳密モードをオンにする

SQL_MODEで厳密モードが有効になっている、つまりSQL_MODEパラメータにSTRICT_TRANS_TABLESパラメータが含まれている

## セッションモードのsql_modeを設定してstrict_trans_tablesを含める
mysql> セッション sql_mode を "STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION" に設定します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
 
mysql> @@sql_mode\G を選択
************************** 1. 行 ****************************
@@sql_mode: STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION
セット内の 1 行 (0.00 秒)
 
## test2 テスト テーブルを作成します (ここでゼロフィルが指定され、先頭のゼロが埋められ、符号なしも含まれます)
mysql> テーブルが存在しない場合は作成する test2(
    -> id tinyint ゼロフィル
    ->)engine=innodb 文字セット utf8 照合 utf8_general_ci;
クエリは正常、影響を受けた行は 0 行 (0.01 秒)
     ## id フィールドの型は tinyint zerofill、範囲は 0 ~ 255、長さは 3 です。255 の長さは 3 であるためです。

 ## test2 のテーブル構造を表示します。mysql> desc test2;
+-------+------------------------------+------+-----+--------+-------+
| フィールド | タイプ | Null | キー | デフォルト | 追加 |
+-------+------------------------------+------+-----+--------+-------+
| id | tinyint(3) 符号なしゼロフィル | YES | | NULL | |
+-------+------------------------------+------+-----+--------+-------+
セット内の 1 行 (0.00 秒)
 
## 0~255 の範囲の整数とこの範囲外の整数の挿入範囲をテストしますmysql> insert into test2 values(-1); # 値 -1 を挿入します (エラー (0~255 の範囲外))
エラー 1264 (22003): 行 1 の列 'id' の値が範囲外です
 
mysql> insert into test2 values(0); # 値 0 を挿入します (通常、0 から 255 の範囲)
クエリは正常、1 行が影響を受けました (0.06 秒)
 
mysql> insert into test2 values(255); # 値255を挿入します。通常値です(0~255の範囲)。
クエリは正常、1 行が影響を受けました (0.05 秒)
 
mysql> insert into test2 values(256); # 値 256 を挿入、エラー (0 から 255 の範囲外)
エラー 1264 (22003): 行 1 の列 'id' の値が範囲外です
 
mysql> test2 から * を選択します。
+------+
|id|
+------+
| 000 |
| 255 |
+------+
セット内の 2 行 (0.00 秒)

1.4.2 SQLモードが厳密モードではない

SQL_MODE は厳密モードを有効にしません。つまり、SQL_MODE パラメータに STRICT_TRANS_TABLES パラメータが含まれていません。

## sql_mode の strit_trans_tables 変数を除外するようにセッション モードを設定します。mysql> set session sql_mode="NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";

クエリは正常、影響を受けた行は 0 行、警告は 1 件 (0.00 秒)
mysql> @@sql_mode\G を選択
************************** 1. 行 ****************************
@@sql_mode: NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION
セット内の 1 行 (0.00 秒)

## test22 テーブルを作成します (ここでゼロフィルが指定され、先頭のゼロが埋められ、符号なしも含まれます)
mysql> テーブルが存在しない場合は作成する test22(
    -> id tinyint ゼロフィル
    ->)engine=innodb 文字セット utf8 照合 utf8_general_ci;
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
  ## id フィールドの型は tinyint unsigned で、範囲は 0 ~ 255、長さは 3 です。255 の長さは 3 だからです。
 
## test22 のテーブル構造を表示します。mysql> desc test22;
+-------+------------------------------+------+-----+--------+-------+
| フィールド | タイプ | Null | キー | デフォルト | 追加 |
+-------+------------------------------+------+-----+--------+-------+
| id | tinyint(3) 符号なしゼロフィル | YES | | NULL | |
+-------+------------------------------+------+-----+--------+-------+
セット内の 1 行 (0.00 秒)
 
## 0 から 255 の範囲の整数とこの範囲外の整数の挿入をテストします。mysql> insert into test22(id) values(-1);
クエリは正常、1 行が影響を受け、1 つの警告 (0.00 秒)
  ## 範囲内ではないため、挿入時にエラーは報告されません (sql_mode で厳密モードが有効になっていないため)。
  ## ただし、テーブルにあるのは -1 ではなく 0 です。ただし、zerofill パラメータがあるため、表示時に先頭にゼロが埋め込まれます。
 
mysql> test22(id) に値(0) を挿入します。
クエリは正常、1 行が影響を受けました (0.01 秒)
  ## 範囲内ではテーブルに挿入された数値も 0 なので、エラーは報告されません。
 
mysql> test22(id) に値(255) を挿入します。
クエリは正常、1 行が影響を受けました (0.01 秒)
  ## 範囲内であり、テーブルに挿入された数値も 255 であるため、エラーは報告されません。
 
mysql> test22(id) に値(256) を挿入します。 
クエリは正常、1 行が影響を受け、1 つの警告 (0.00 秒)
  ## 範囲内ではないため、挿入時にエラーは報告されません (sql_mode で厳密モードが有効になっていません)
  ## しかし、表のデータは256ではなく255です
 
mysql> test22 から * を選択します。
+------+
|id|
+------+
| 000 |
| 000 |
| 255 |
| 255 |
+------+
セット内の 4 行 (0.00 秒)

1.5 unsigned属性とzerofill属性なし

1.5.1 SQLモードで厳密モードをオンにする

SQL_MODEで厳密モードが有効になっている、つまりSQL_MODEパラメータにSTRICT_TRANS_TABLESパラメータが含まれている

## セッションモードのsql_modeを設定してstrict_trans_tablesを含める
mysql> セッション sql_mode を "STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION" に設定します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
 
mysql> @@sql_mode\G を選択
************************** 1. 行 ****************************
@@sql_mode: STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION
セット内の 1 行 (0.00 秒)
 
## test3 テーブルを作成する (符号なしゼロフィルなし)
mysql> テーブル test3( を作成します。
    -> id tinyint
    ->)engine=innodb 文字セット utf8 照合 utf8_general_ci;
クエリは正常、影響を受けた行は 0 行 (0.06 秒)
   ## idフィールドの型はtinyintで、範囲は-128から127で、表示長は4です。これは、符号("-")が表示されるためです。
 
## test3 のテーブル構造を表示します。mysql> desc test3;
+-------+------------+------+------+--------+-------+
| フィールド | タイプ | Null | キー | デフォルト | 追加 |
+-------+------------+------+------+--------+-------+
| id | tinyint(4) | はい | | NULL | |
+-------+------------+------+------+--------+-------+
セット内の1行(0.01秒)
 
## -128 から 127 の範囲の整数と範囲外の整数を挿入するテストmysql> insert into test3(id) values(-129); # 値 -129 を挿入、エラー、範囲外ERROR 1264 (22003): 行 1 の列 'id' の値が範囲外です
 
mysql> insert into test3(id) values(-128); # 挿入値 -128、正しい、範囲内 クエリは正常、1 行が影響を受けました (0.00 秒)

mysql> insert into test3(id) values(127); # 値 127 を挿入します。正しいです。範囲内です。クエリは正常です。1 行が影響を受けました (0.01 秒)
 
mysql> insert into test3(id) values(128); # 値 128 を挿入、エラー、範囲外 ERROR 1264 (22003): 行 1 の列 'id' の値が範囲外です
 
mysql> test3 から * を選択します。
+------+
|id|
+------+
|-128 |
| 127 |
+------+
セット内の 2 行 (0.00 秒)

1.5.2 SQLモードが厳密モードではない

SQL_MODEで厳密モードが有効になっていません。つまり、SQL_MODEパラメータにSTRICT_TRANS_TABLESパラメータが含まれていません。

## sql_mode の strit_trans_tables 変数を除外するようにセッション モードを設定します。mysql> set session sql_mode="NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";
クエリは正常、影響を受けた行は 0 行、警告は 1 件 (0.00 秒)
 
mysql> @@sql_mode\G を選択
************************** 1. 行 ****************************
@@sql_mode: NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION
セット内の 1 行 (0.00 秒)
 
## test33 テーブルを作成する (符号なしゼロフィルなし)
mysql> テーブル test33( を作成します
    -> id tinyint
    ->)engine=innodb 文字セット utf8 照合 utf8_general_ci;
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
  ## idフィールドの型はtinyintで、範囲は-128から127で、表示長は4です。これは、符号("-")が表示されるためです。
 
## test33 のテーブル構造を表示します。mysql> desc test33;
+-------+------------+------+------+--------+-------+
| フィールド | タイプ | Null | キー | デフォルト | 追加 |
+-------+------------+------+------+--------+-------+
| id | tinyint(4) | はい | | NULL | |
+-------+------------+------+------+--------+-------+
セット内の 1 行 (0.00 秒)
 

## -128 から 127 の範囲の整数とこの範囲外の整数を挿入するテストmysql> insert into test33(id) values(-129);
クエリは正常、1 行が影響を受け、1 つの警告 (0.00 秒)
  ## 範囲内ではありません。sql_mode で厳密モードが有効になっていないため、挿入中にエラーは報告されません。## テーブルに挿入された値は -129 ではなく -128 です。
 
mysql> test33(id) に値 (-128) を挿入します。
クエリは正常、1 行が影響を受けました (0.01 秒)
  ## 値が範囲内であれば、挿入時にエラーは報告されません。挿入される値は範囲内の値と同じです。mysql> insert into test33(id) values(127);
クエリは正常、1 行が影響を受けました (0.00 秒)
  ## 値が範囲内であれば、エラーは報告されません。挿入される値は範囲内の値と同じです。mysql> insert into test33(id) values(128);
クエリは正常、1 行が影響を受け、1 つの警告 (0.01 秒)
  ## 範囲内ではありません。sql_mode で厳密モードが有効になっていないため、挿入中にエラーは報告されません。## テーブルに挿入された値は 128 ではなく 127 です。
 
mysql> test33 から * を選択します。
+------+
|id|
+------+
|-128 |
|-128 |
| 127 |
| 127 |
+------+
セット内の 4 行 (0.00 秒)

MySQL 整数データ型 Tinyint の詳細な説明に関するこの記事はこれで終わりです。MySQL 整数データ型 Tinyint の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL の int、bigint、smallint、tinyint の違いについて詳しく紹介します。
  • mysqlのTINYINTの値の範囲
  • MySQL における tinyint と int の違いの詳細な説明
  • MySQLにおけるTinyint(1)とTinyint(4)の違いの詳細な分析

<<:  JavaScriptクロージャの原理と機能の詳細な説明

>>:  表に斜めヘッダー効果を出す5つの方法

推薦する

mysql 8.0.20 winx64.zip 圧縮版のインストールと設定方法のグラフィックチュートリアル

mysql 8.0.20 winx64.zip圧縮版のインストールチュートリアルは以下のように記録さ...

nginxとIISで使用できるSSL証明書を作成する

目次SSL証明書の作成1. 秘密鍵を生成する2. 証明書要求ファイルを生成する3. CRT証明書ファ...

JS+Canvas が抽選ホイールを引く

この記事では、宝くじターンテーブルを描画するJS + Canvasの具体的なコードを参考までに共有し...

gbk utf8 GBK と UTF-8 ウェブページエンコーディングを正しく理解して使用する方法

Web ページ エンコーディングは英語では web page encoding と翻訳され、Web ...

フロントエンドとバックエンドを分離した nginx 構成を展開するための完全な手順

序文決まり文句です。ここでは、フロントエンドとバックエンドの分離についての私の理解についてお話ししま...

Vue シングルページ アプリケーションで Markdown レンダリングを実装する

以前、Markdown をレンダリングするときに、mavonEditor のプレビュー モードを使用...

CentOS8 ネットワークカード設定ファイル

1. はじめにCentOS8 システムの更新、新しいバージョンは人々に非常に快適に感じさせます。 こ...

広告を閉じるための JavaScript カウントダウン

広告を閉じるまでのカウントダウンを実装するために JavaScript を使用するまだフロントエンド...

MySQL で中国語を入力するときに発生するエラー 1366 の解決方法

MySQL で中国語を入力すると、次のエラーが発生します。エラー 1366: 1366: 行 1 の...

MySQL データベースのマスター スレーブ分離のサンプル コード

導入MySQL データベースの読み取りと書き込みの分離を設定すると、データベースに対する書き込み操作...

JSはマップを使用してdouble配列を統合します

目次序文データのシミュレーション結合されたデータ合併のアイデアコードの表示と分析最初のステップステッ...

UbuntuはPythonスクリプトのサンプルコードを定期的に実行する

オリジナルリンク: https://vien.tech/article/157序文この記事では、Ub...

MySQL InnoDB のトランザクション特性を確保するにはどうすればよいですか?

序文「データベース トランザクションの特徴は何ですか?」と尋ねられたら、 ACID 特性である原子性...