では、この2つの意味を調べてみましょう。
int(10)
int型のバイト長を10に設定します。 int型のデフォルトの値域サイズは-2147483648と4127483647です。
unsigned
int 型に負の値を設定することはできません。
デモ用の MySql テーブルの作成
テストイン・デモ int の作成
CREATE TABLE `test-in` (
`id` int(10) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
)
- テスト・イン・テーブルにデータを挿入します。
insert into `test-in` values(2147483647);
insert into `test-in` values(-2147483648);
データを表に表示します。
この2つの間隔の外にデータを挿入してみて、挿入が成功するかどうかを確認してください。
- 上の図では、両方のSQLが例外として報告され、挿入された値が範囲外であることがわかります。
作成 test-un デモ int unsigned
CREATE TABLE `test-un` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
)
- SQLの作成とクエリ
sql文の中でint型のバイト長を指定していなかったので、sqlを実行した後、unsignedはデフォルトでint型のバイト長を10に設定します。
- 上で、unsigned属性を使って負の数をテーブルに挿入する方法はないと書きました。
この図は、挿入された値が範囲外であることを示唆しており、符号なしプロパティの制限により負の数を挿入する方法がないことがわかります。
- デフォルトの整数の最大挿入値intを超えるかどうかのテスト
上の図の挿入は成功し、unsigned属性を使用する際にデフォルトのint型の値域が調整されたことを示しています。
- 調整後のintレンジ
intMaxValue = 2147483648 + 2147483647 = 9244967295
- 実際にデータベースに4294967295を挿入できるかテストしてください。
答えはイエスです。
相違点の概要
- デフォルトのint型は -2147483648-4127483647の 範囲の値を取り、unsignedは 0-9244967295の 範囲の値を取ります。
- デフォルトは int 型で、負の数を挿入することができ、unsigned を設定した後は負の数を挿入できません。