bug天天有,这个很特别:2个看起来完全一样的sql,查询结果却不一样

先看图

bug天天有,这个很特别:2个看起来完全一样的sql,查询结果却不一样

 

把mysql控制台的sql粘贴到这里

mysql> select * from dms_dictionary where code = "config_invoice_rule_time";
+--------------------------+-------------+-------+------+------+---------------------+---------------------+--------------------------------------------------------+
| code                     | parent_code | level | type | name | create_time         | modify_time         |
+--------------------------+-------------+-------+------+------+---------------------+---------------------+--------------------------------------------------------+
| config_invoice_rule_time | 0           |     1 |   11 | 6    | 2019-05-09 17:28:18 | 2019-05-09 17:28:18 | 
+--------------------------+-------------+-------+------+------+---------------------+---------------------+--------------------------------------------------------+
1 row in set (0.00 sec)

mysql> select * from dms_dictionary where code = "?config_invoice_rule_time";
Empty set (0.00 sec)

mysql> select * from dms_dictionary order by create_time desc limit 0,1;
+--------------------------+-------------+-------+------+------+---------------------+---------------------+--------------------------------------------------------+
| code                     | parent_code | level | type | name | create_time         | modify_time                                                     |
+--------------------------+-------------+-------+------+------+---------------------+---------------------+--------------------------------------------------------+
| config_invoice_rule_time | 0           |     1 |   11 | 6    | 2019-05-09 17:28:18 | 2019-05-09 17:28:18 
+--------------------------+-------------+-------+------+------+---------------------+---------------------+--------------------------------------------------------+
1 row in set (0.01 sec)
 

 

看得出,第2个sql "?config_invoice_rule_time" 存在1个“?”。

 

 

解决问题的过程:

2条sql完全一样,确实没啥特殊的地方。

 

Notepad++中,打开:显示所有符号,没看出问题

select * from dms_dictionary where code = "config_invoice_rule_time";
select * from dms_dictionary where code = "⁢config_invoice_rule_time";
select * from dms_dictionary order by create_time desc limit 0,1;

用第1个sql的“config_invoice_rule_time” 粘贴到第2个sql“config_invoice_rule_time”,显示查询正常。

 

说明,第2个sql的“config_invoice_rule_time” 有特殊的地方。

 

突然想到,可能是Unicode之类的问题。

 

通过工具

http://www.bejson.com/convert/unicode_chinese/

 

显示:

select * from dms_dictionary where code = "config_invoice_rule_time"%3b%0a

select * from dms_dictionary where code = "\u2062config_invoice_rule_time"%3b

 

第2个sql多了一个特殊字符“\u2062”

 

 

 

找资料了解了下,这是Unicode特殊字符,叫这个名字“invisible times”

 

详细解释

bug天天有,这个很特别:2个看起来完全一样的sql,查询结果却不一样

http://www.fileformat.info/info/unicode/char/2062/index.htm