0
点赞
收藏
分享

微信扫一扫

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

小_北_爸 2023-04-05 阅读 16


先看图

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

 

把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,查询结果却不一样_mysql_02

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

举报

相关推荐

0 条评论