【问题标题】:MySQL trims value in WHEREMySQL 修剪 WHERE 中的值
【发布时间】:2013-11-14 14:09:15
【问题描述】:

我没有找到类似的问题可能是因为我没有找到正确的单词(英语不是我的第一语言)

问题

我有一个 varchar 值,其末尾有一个空格:"opt-193-381-markets ",当我使用 没有 空格的值执行 SELECT 时,它返回相同的结果.这就像 MySQL 正在修剪 WHERE 中的值

表定义:

mysql> desc message;
+------------+--------------+------+-----+---------+-------+
| Field      | Type         | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| FileId     | int(11)      | NO   | PRI | 0       |       |
| MessageKey | varchar(100) | NO   | PRI |         |       |
| NumericKey | tinyint(1)   | NO   |     | 0       |       |
| IsObsolete | tinyint(4)   | YES  | MUL | NULL    |       |
| notes      | text         | YES  |     | NULL    |       |
+------------+--------------+------+-----+---------+-------+

例子:

mysql> SELECT * FROM message WHERE MessageKey = "opt-193-381-markets";
+--------+----------------------+------------+------------+-------+
| FileId | MessageKey           | NumericKey | IsObsolete | notes |
+--------+----------------------+------------+------------+-------+
|    304 | opt-193-381-markets  |          0 |          1 | NULL  |
|    337 | opt-193-381-markets  |          0 |          1 | NULL  |
+--------+----------------------+------------+------------+-------+

请注意,MessageKey 的值末尾有空格,我只是要求没有空格的值。

mysql> SELECT * FROM message WHERE MessageKey = "opt-193-381-markets ";
+--------+----------------------+------------+------------+-------+
| FileId | MessageKey           | NumericKey | IsObsolete | notes |
+--------+----------------------+------------+------------+-------+
|    304 | opt-193-381-markets  |          0 |          1 | NULL  |
|    337 | opt-193-381-markets  |          0 |          1 | NULL  |
+--------+----------------------+------------+------------+-------+

再增加一个空格

mysql> SELECT * FROM message WHERE MessageKey = "opt-193-381-markets  ";
+--------+----------------------+------------+------------+-------+
| FileId | MessageKey           | NumericKey | IsObsolete | notes |
+--------+----------------------+------------+------------+-------+
|    304 | opt-193-381-markets  |          0 |          1 | NULL  |
|    337 | opt-193-381-markets  |          0 |          1 | NULL  |
+--------+----------------------+------------+------------+-------+

转义

mysql> SELECT * FROM message WHERE MessageKey = "opt-193-381-markets\ \ ";
+--------+----------------------+------------+------------+-------+
| FileId | MessageKey           | NumericKey | IsObsolete | notes |
+--------+----------------------+------------+------------+-------+
|    304 | opt-193-381-markets  |          0 |          1 | NULL  |
|    337 | opt-193-381-markets  |          0 |          1 | NULL  |
+--------+----------------------+------------+------------+-------+

我也试过用单引号'opt-193-381-markets'

问题

为什么我无法搜索到MessageKey 的确切值?

谢谢

【问题讨论】:

  • 尝试使用单引号而不是双引号'opt-193-381-markets '
  • 我试过了,还是一样
  • 所以...现在我会调查一下。
  • 有趣,以前从未注意到这一点。
  • 这个列/表的字符集是什么?

标签: mysql select where trim


【解决方案1】:

使用binary comparison operator

SELECT * FROM message WHERE BINARY(MessageKey) = 'opt-193-381-markets';

【讨论】:

  • 谢谢!,这已经奏效了。几分钟后我会给你支票
猜你喜欢
  • 2017-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-08
  • 1970-01-01
  • 2020-06-11
  • 2010-11-08
  • 1970-01-01
相关资源
最近更新 更多