\002 究竟是个什么东西?

2017-12-28 16:18:40 +08:00
 checgg

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 里面会不一样?

4903 次点击
所在节点    程序员
8 条回复
geelaw
2017-12-28 16:22:41 +08:00
riggzh
2017-12-28 16:23:47 +08:00
\0 转义了啊
checgg
2017-12-28 16:58:23 +08:00
@riggzh
@geelaw

为什么你们都知道 mysql \0 会被转译我却不知道。。。
geelaw
2017-12-28 17:01:45 +08:00
@checgg 这并不需要很渊博的知识,只需要基本的解决问题思路。

若你看一下 mysql 的输出,就会发现它输出了一个空白和 02,而 \0 输出为空白是常见做法,自然想到可能是 MySQL 转义方式不同,搜索 mysql string escaping 就可以见到相关文档。

有趣的是,你惟有在 MySQL 里不计算 \002 的长度。
checgg
2017-12-28 17:10:22 +08:00
@geelaw 谢谢
linnil
2017-12-28 17:17:12 +08:00
进行了转义, mysql 中'\0'就是 NUL 字符
hl
2017-12-28 17:33:51 +08:00
anthow
2017-12-29 09:23:05 +08:00
the character \002 is the octal code for ^B

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/418336

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX