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クロージャの原理と機能の詳細な説明
キーボード文字英語`バッククォート〜チルダ!叫ぶ@で#ナンバーサイン$ドル%パーセント^キャレット&...
1. インストールプロセス中に問題が発生しないように、まず依存パッケージをインストールします。 [r...
パラメータを渡すために href が必要で、パラメータが中国語の場合、文字化けした文字が表示されます...
目次1. 大文字と小文字の区別を決定するパラメータ2. パラメータ変更に関する注意事項要約: 1. ...
展開環境:インストールバージョン Red Hat Cent 7.0 MYSQL バージョン 8.0....
目次序文入力ボックスコンポーネントレイアウトvモデルデータ検証ルール設計形状サブコンポーネントは検証...
3 ノード MGR 内の 1 つのノードに異常があり、MGR クラスターに再度追加する必要があるとし...
コード:コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC &...
まず、いくつかの概念を明確にします。 JDBC: Javaデータベース接続、Oricalによって規定...
私たちウェブマスターは皆、ウェブサイトを最適化する際に記事内のキーワードを太字にすることが最適化に非...
組織内で何らかのパスワード ポリシーがすでに実装されている場合は、この記事を読む必要はありません。た...
まず、セキュリティ上の理由から、JavaScript はローカル リソース ファイルに直接アクセスで...
この記事では、centos6.6 で php7 + nginx 環境をインストールする方法について説...
序文3 列レイアウトは、その名前が示すように、両側が固定され、中央が適応します。実際の開発では、3 ...
この記事では、Docker で構築された Laravel および Vue プロジェクトの開発環境を紹...