【发布时间】:2016-09-12 10:48:28
【问题描述】:
以下语句返回空集。
SELECT id,field_DOMid FROM korektura WHERE field_DOMid = 'vyznam-1284--vyklad_vyznamu' ORDER BY cts DESC LIMIT 1;
但是看LIKE的结果(值是有的):
任何人都可以提出可能导致这种行为的原因吗?是MySQL服务器问题,排序问题? (我们在 collations/index.xml 中使用为 UTF8 字符集定义的自定义排序规则)
没有尾随空格:
mysql> SELECT field_DOMid, CHAR_LENGTH(field_DOMid), CHAR_LENGTH(TRIM(field_DOMid)) FROM korektura WHERE id=27580;
+-----------------------------+--------------------------+--------------------------------+
| field_DOMid | CHAR_LENGTH(field_DOMid) | CHAR_LENGTH(TRIM(field_DOMid)) |
+-----------------------------+--------------------------+--------------------------------+
| vyznam-1284--vyklad_vyznamu | 27 | 27 |
+-----------------------------+--------------------------+--------------------------------+
1 row in set (0.00 sec)
更重要的是,MySQL 文档说:
所有 MySQL 排序规则都是 PADSPACE 类型。这意味着在比较 MySQL 中的所有 CHAR、VARCHAR 和 TEXT 值时,不考虑任何尾随空格。
提前致谢!
【问题讨论】:
-
值是否以空格开头?
-
不幸的是,情况可能并非如此。检查更新的答案。
-
让我们看看
LENGTH()(字节数)和HEX()。 -
请提供
SHOW CREATE TABLE korektura。 -
什么版本的mysql或mariadb?