以下の動作に困惑しています。SELECT最初のステートメントは 1 を返し、2 番目のステートメントは 0 を返すのはなぜですか? 日付がリテラル以上であるため、両方が 1 を返すことを期待しています。
照合が日付の比較に影響するのはなぜですか? 日付をリテラルと比較するとき、日付 (または日時) を文字列として表現するのは間違っていますか? もしそうなら、どのように日付とリテラルの比較を行うべきですか?
mysql> CREATE DATABASE テスト;
クエリ OK、影響を受ける 1 行 (0.00 秒)
mysql> テストを使用します。
mysql> SET NAMES utf8 COLLATE utf8_general_ci;
クエリ OK、影響を受ける行は 0 (0.00 秒)
mysql> CREATE TABLE foo (
バーの日付 NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
クエリ OK、影響を受ける行は 0 (0.15 秒)
mysql> INSERT INTO foo (バー) 値 ('2013-01-01');
クエリ OK、影響を受ける 1 行 (0.00 秒)
mysql> SELECT COUNT(*) FROM foo WHERE バー >= '2013-01-01 00:00:00';
+---------+
| | カウント(*) |
+---------+
| | 1 |
+---------+
セットで 1 行 (0.00 秒)
mysql> SET NAMES utf8 COLLATE utf8_unicode_ci;
クエリ OK、影響を受ける行は 0 (0.00 秒)
mysql> SELECT COUNT(*) FROM foo WHERE バー >= '2013-01-01 00:00:00';
+---------+
| | カウント(*) |
+---------+
| | 0 |
+---------+
セットで 1 行 (0.00 秒)