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

MySQLのYEAR(2)とYEAR(4)の違いは何?年データの格納形式をわかりやすく解説

MySQLのYEAR型には、年を2桁で格納するYEAR(2)と、4桁で格納するYEAR(4)の2種類があります。本記事では、それぞれの特徴や指定できる範囲の違い、そして2桁形式に潜む落とし穴について詳しく解説します。

YEAR(2):2桁形式で年を格納する

YEAR(2)は、年を2桁の数値として保存する形式です。たとえば、1969年を「69」と記述して保存できます。指定できる範囲は1970年から2069年まで(「70」~「69」で表現)です。

YEAR(4):4桁形式で年を格納する

YEAR(4)は、年を4桁の数値として保存する形式です。たとえば、1969年ならそのまま「1969」と記述します。指定できる範囲は1901年から2155年までと幅広く、世紀の曖昧さが一切ありません。

MySQLにおける2桁の年の解釈ルール

MySQLは、2桁の年値を以下のルールに従って解釈します。

  • 00〜69 の値 → 2000〜2069年に変換される
  • 70〜99 の値 → 1970〜1999年に変換される

2桁形式での日付保存が推奨されない理由

日付値を2桁形式で保存してはいけません。この形式で保存された値は、どの世紀(1900年代か2000年代か)を指しているのか不明確になり、データが曖昧になってしまうためです。

以下のMySQLの実行例を見ると、この問題がより明確に理解できます。

mysql> Create Table year_test(val year(2));
Query OK, 0 rows affected, 1 warning (0.23 sec)

mysql> insert into year_test(val) values('70');
Query OK, 1 row affected (0.14 sec)

mysql> insert into year_test(val) values('00');
Query OK, 1 row affected (0.06 sec)

mysql> select * from year_test;
+------+
| val  |
+------+
| 70   |
| 00   |
+------+
2 rows in set (0.00 sec)

mysql> select * from year_test where val = '1970';
+------+
| val  |
+------+
| 70   |
+------+
1 row in set (0.03 sec)

mysql> select * from year_test where val = '2000';
+------+
| val  |
+------+
| 00   |
+------+
1 row in set (0.00 sec)

mysql> select * from year_test where val = '1900';
Empty set (0.06 sec)

この結果から、「val」カラムに「00」を保存した際、それが「1900」なのか「2000」なのかは一見して判別できません。実際には、MySQLはこの値を2000年として解釈しています。このようにYEAR(2)は世紀情報が失われるため、意図しないデータ解釈を招く恐れがあるのです。

補足:YEAR(2)は非推奨となっている

なお、YEAR(2)はMySQL 5.5.3以降で非推奨(deprecated)となり、MySQL 5.7以降ではサポートされなくなりました。上記の実行例でも、テーブル作成時に警告(warning)が出力されている点に注目してください。新しいテーブルを作成する場合は、曖昧さのないYEAR(4)を使用することを強くお勧めします。

  1. MySQLにおける「!=NULL」と「IS NOT NULL」の違いとは?

    MySQLでは、値を!=NULLと比較すると、結果は必ずNULLになります。つまり、!=NULLという比較は意味を持ちません。NULLは「不明な値」を表すため、通常の比較演算子では判定できないのです。NULL値を判定するには、専用の演算子であるIS NOT NULLを使用します。ここでは、!=NULLとIS NOT NULLの違いを実際に確認するために、まずテーブルを作成します。テーブルの作成まず、次のコマンドでテーブルを作成します。mysql> create table DemoTable1970     (    

  2. CとC++の違いは何?主要な相違点をわかりやすく解説

    C言語とC++はどちらも広く使われているプログラミング言語ですが、設計思想や搭載されている機能には大きな違いがあります。この記事では、CとC++の主な相違点を項目ごとにわかりやすく解説します。 CとC++の主な違い 1. 言語としての関係性 CはC++のサブセット(部分集合)と考えることができます。ほとんどの有効なCプログラムは、そのままC++プログラムとしてもコンパイル・実行が可能です。ただし、厳密には一部例外も存在するため注意が必要です。 2. プログラミングパラダイム Cは構造化(手続き型)プログラミング言語であり、処理の手順を上から順に記述していくスタイルが特徴です。一方、C++