python
In [8]: print 'hehe' + '\002' + 'hehe'
hehehehe
In [9]: print len('\002')
1
php
print 'hehe' . "\002" . 'hehe';
print count("\002");
hehehehe1
mysql
mysql> select concat('hehe',"\002",'hehe') as a;
+------------+
| a |
+------------+
| hehe 02hehe |
+------------+
1 row in set (0.04 sec)
为什么在 mysql 里面会不一样?
1
geelaw 2017-12-28 16:22:41 +08:00
因为 MySQL 认为 \002 是 '\0' + '02'
https://dev.mysql.com/doc/refman/5.7/en/string-literals.html#character-escape-sequences |
2
riggzh 2017-12-28 16:23:47 +08:00
\0 转义了啊
|
4
geelaw 2017-12-28 17:01:45 +08:00 via iPhone
@checgg 这并不需要很渊博的知识,只需要基本的解决问题思路。
若你看一下 mysql 的输出,就会发现它输出了一个空白和 02,而 \0 输出为空白是常见做法,自然想到可能是 MySQL 转义方式不同,搜索 mysql string escaping 就可以见到相关文档。 有趣的是,你惟有在 MySQL 里不计算 \002 的长度。 |
6
linnil 2017-12-28 17:17:12 +08:00
进行了转义, mysql 中'\0'就是 NUL 字符
|
7
hl 2017-12-28 17:33:51 +08:00
|
8
anthow 2017-12-29 09:23:05 +08:00
the character \002 is the octal code for ^B
|