MySQLのbigintが符号付きか符号なしかを理解する方法
MySQLでは、unsignedを指定しない場合、bigintは符号付き(signed)として扱われます。一方、unsignedを明示的に指定すると、bigintは符号なし(unsigned)になります。
両者の格納できる値の範囲は以下のとおりです。
- 符号付きbigint:-9223372036854775808 ~ 9223372036854775807
- 符号なしbigint:0 ~ 18446744073709551615
テーブルの作成
まず、テーブルを作成してみましょう。
mysql> create table DemoTable
(
Number bigint, // signed(符号付き)
Number2 bigint unsigned // unsigned(符号なし)
);
Query OK, 0 rows affected (1.08 sec)レコードの挿入
insertコマンドを使用して、テーブルにレコードを挿入します。
mysql> insert into DemoTable values(18446744073709551615,18446744073709551615); ERROR 1264 (22003): Out of range value for column 'Number' at row 1 mysql> insert into DemoTable values(9223372036854775807,18446744073709551615); Query OK, 1 row affected (0.28 sec)
上記の例では、符号付きの「Number」列に18446744073709551615を挿入しようとした際、「範囲外の値」というエラーが発生しています。これは、符号付きbigintの最大値が9223372036854775807であるためです。一方、符号なしの「Number2」列には問題なく挿入できています。
レコードの表示
select文を使用して、テーブルの全レコードを表示します。
mysql> select * from DemoTable;
以下の出力が得られます。
+---------------------+----------------------+ | Number | Number2 | +---------------------+----------------------+ | 9223372036854775807 | 18446744073709551615 | +---------------------+----------------------+ 1 row in set (0.00 sec)
この結果から、符号付きの「Number」列には最大で9223372036854775807までしか格納できないのに対し、符号なしの「Number2」列には18446744073709551615という、約2倍の大きさの正の値を格納できることがわかります。大きな正の数値を扱う場合は、unsignedの指定が有効です。
-
MySQLで行をスキップする方法|LIMIT OFFSETの使い方を実例で解説
MySQLで特定の行をスキップしてデータを取得したい場合は、LIMIT OFFSET句を使用します。OFFSETに指定した数だけ先頭の行が読み飛ばされ、LIMITで指定した件数分の行が返されます。本記事では、テーブル作成から実際のクエリ実行まで、具体例とともに手順を解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成しましょう。 mysql> create table DemoTable860( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, &nbs
-
MySQLで日時を再フォーマットする方法|DATE_FORMAT関数の使い方
MySQLで日時(datetime)の表示形式を変更したい場合は、DATE_FORMAT() 関数を使用します。MySQLはデフォルトで「yyyy-mm-dd」形式の日時を返しますが、この関数を使えば任意の形式に自由に変換できます。サンプルテーブルの作成まず、テーブルを作成します。mysql> create table DemoTable1558 -> ( -> EmployeeJoiningDate datetime -> );Qu