MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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の指定が有効です。

  1. MySQLで行をスキップする方法|LIMIT OFFSETの使い方を実例で解説

    MySQLで特定の行をスキップしてデータを取得したい場合は、LIMIT OFFSET句を使用します。OFFSETに指定した数だけ先頭の行が読み飛ばされ、LIMITで指定した件数分の行が返されます。本記事では、テーブル作成から実際のクエリ実行まで、具体例とともに手順を解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成しましょう。 mysql> create table DemoTable860(     Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,   &nbs

  2. MySQLで日時を再フォーマットする方法|DATE_FORMAT関数の使い方

    MySQLで日時(datetime)の表示形式を変更したい場合は、DATE_FORMAT() 関数を使用します。MySQLはデフォルトで「yyyy-mm-dd」形式の日時を返しますが、この関数を使えば任意の形式に自由に変換できます。サンプルテーブルの作成まず、テーブルを作成します。mysql> create table DemoTable1558    -> (    -> EmployeeJoiningDate datetime    -> );Qu