1.1 tinyint型の説明
#### フォーマット 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 をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: JavaScriptクロージャの原理と機能の詳細な説明
Dockerデスクトップをインストールするダウンロード先: Docker Desktop for M...
目次1. 切り替え方法2. タブを動的に生成する3. キャッシュコンポーネント3.1 キープアライブ...
1. インストールディレクトリにzipパッケージを解凍します。まず、mysql-8.0.11-win...
背景: 1. データベースに通知テーブルがある あなたは見ることができますgmt_create、通知...
実験環境: 1. CentOS 7 サーバー 3 台2. mysql5.7.26 (3台のマシンはす...
導入: MySQL を使用してテーブルを作成する場合、通常は自動インクリメント フィールド (AUT...
目次1. v-forループでは常にキーを使用する2. 特定のスコープ内でv-forループを使用する3...
プロジェクトディレクトリを作成する php ディレクトリをコピーする次のプロジェクト構造を作成します...
目次序文antd はどのようにしてコンポーネントをカプセル化するのでしょうか?ディバイダーコンポーネ...
目次1. 冷蔵庫に入りきらない象2. シャドウクローン文字列3. 実際に見た「奇妙なボール」 4. ...
1. PAM設定ファイルを編集する sudo vim /etc/pam.d/ログイン2行目に以下を...
序文この世の愛には値段のつくものもありますが、データには値段のつけられないものがあります。将来、誤っ...
目次1. MySQLインストールパッケージをダウンロードする2. MySQLのアンインストール手順3...
1. ウェブサイトのホームページのハイパーテキスト ドキュメントの構成構造は、ユーザーの注意をできる...
1. CSSファイルの命名規則提案: 文字、_、-、数字を使用します。文字で始まる必要があり、純粋な...