Mysql 对比较日期字段和文字感到困惑吗
我对下面的行为感到困惑。为什么第一个Mysql 对比较日期字段和文字感到困惑吗,mysql,sql,Mysql,Sql,我对下面的行为感到困惑。为什么第一个SELECT语句返回1,而第二个语句返回0?我希望它们都返回1,因为日期大于或等于文本 为什么排序规则会影响日期比较?将日期与文字进行比较时,将日期(或日期时间)表示为字符串是否错误?如果是这样,我应该如何进行日期与文字的比较 mysql> CREATE DATABASE test; Query OK, 1 row affected (0.00 sec) mysql> USE test; mysql> SET NAMES utf8 COLLATE utf8
SELECT
语句返回1,而第二个语句返回0?我希望它们都返回1,因为日期大于或等于文本
为什么排序规则会影响日期比较?将日期与文字进行比较时,将日期(或日期时间)表示为字符串是否错误?如果是这样,我应该如何进行日期与文字的比较
mysql> CREATE DATABASE test;
Query OK, 1 row affected (0.00 sec)
mysql> USE test;
mysql> SET NAMES utf8 COLLATE utf8_general_ci;
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE TABLE foo (
bar date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Query OK, 0 rows affected (0.15 sec)
mysql> INSERT INTO foo (bar) VALUES ('2013-01-01');
Query OK, 1 row affected (0.00 sec)
mysql> SELECT COUNT(*) FROM foo WHERE bar >= '2013-01-01 00:00:00';
+----------+
| COUNT(*) |
+----------+
| 1 |
+----------+
1 row in set (0.00 sec)
mysql> SET NAMES utf8 COLLATE utf8_unicode_ci;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT COUNT(*) FROM foo WHERE bar >= '2013-01-01 00:00:00';
+----------+
| COUNT(*) |
+----------+
| 0 |
+----------+
1 row in set (0.00 sec)
mysql>创建数据库测试;
查询正常,1行受影响(0.00秒)
mysql>使用测试;
mysql>设置名称utf8校对utf8\U常规\U ci;
查询正常,0行受影响(0.00秒)
mysql>创建表foo(
酒吧日期不为空
)ENGINE=InnoDB默认字符集=utf8 COLLATE=utf8\U unicode\U ci;
查询正常,0行受影响(0.15秒)
mysql>插入foo(bar)值('2013-01-01');
查询正常,1行受影响(0.00秒)
mysql>从foo中选择COUNT(*),其中bar>='2013-01-01 00:00:00';
+----------+
|计数(*)|
+----------+
| 1 |
+----------+
一行一组(0.00秒)
mysql>设置名称utf8校对utf8\U unicode\U ci;
查询正常,0行受影响(0.00秒)
mysql>从foo中选择COUNT(*),其中bar>='2013-01-01 00:00:00';
+----------+
|计数(*)|
+----------+
| 0 |
+----------+
一行一组(0.00秒)
你试过了吗
SELECT COUNT(*) FROM foo WHERE bar >= _utf8'2013-01-01 00:00:00'
解释您可能假设数据库正在将文本字符串隐式转换为日期,并比较日期。看起来db正在将日期隐式转换为字符串并比较字符串。排序规则会影响此转换,从而影响结果 尝试: 这两个查询应该给出解释行为的不同结果 在任何情况下,cha的建议都会起作用,因为您告诉db显式地将文本字符串转换为日期,然后比较日期
SET NAMES utf8 COLLATE utf8_general_ci;
SELECT * FROM foo;
SET NAMES utf8 COLLATE utf8_unicode_ci;
SELECT * FROM foo;