在打击垃圾邮件的过程中,我发现一些垃圾评论存储在没有任何内容的情况下......
在尝试隔离问题后,这是我在将类似的评论与 MySQL 数据库一起保存到文件后发现的内容......
这是(由于未知输入编码的十六进制)评论前几个“字符”的样子:
D1EA E0F7 E0F2 FC20 EFEE EFF3 EBFF F0ED FBE5 20EF F0EE E3F0 E0EC ECFB
执行后INSERT INTO test VALUES (0xD1EAE0F7E0F2FC20EFEEEFF3EBFFF0EDFBE520EFF0EEE3F0E0ECECFB21),(0x21D1EAE0F7E0F2FC20EFEEEFF3EBFFF0EDFBE520EFF0EEE3F0E0ECECFB), (0x21)
测试mysql表(utf-8)包含3行,第一行没有任何文本,第二和第三行有单个字符“!” 作为文本......(请注意,“!”的 21 个十六进制代码也在第一个条目的末尾,但它没有被保存)。(latin1 编码为每个字节保存了一些无用的文本替换,但这篇文章不是关于它的)
当然,D1EA(D=1101 0001 后面应该跟一个 10xxxxxx 字节,而不是 1110xxxx)不是有效的 UTF-8 字符,但是像数据库服务器这样健壮的系统应该能够处理它......
我的猜测是,Mysql(版本 5.1.66-0+squeeze1)不应该选择何时保存数据,什么时候不保存,即使它不是有效的 UTF-8 编码字符......或者至少,它不应该要求查询当它决定不存储数据时成功了!
它是mysql中的错误,还是什么?
谢谢