在注意到一个应用程序倾向于由于不正确的字符串值错误而丢弃随机电子邮件之后,我经过了,并切换了许多文本列以使用utf8列字符集和默认列归类(utf8_general_ci),以便它可以接受它们。这修复了大多数错误,并使应用程序在遇到非拉丁电子邮件时也停止出现sql错误。
尽管如此,某些电子邮件仍然导致程序遇到不正确的字符串值错误: (Incorrect string value: '\xE4\xC5\xCC\xC9\xD3\xD8...' for column 'contents' at row 1)
内容列是MEDIUMTEXT使用utf8列字符集和utf8_general_ci列排序规则的数据类型。在此列中没有可切换的标志。
请记住,除非绝对必要,否则我不想触摸甚至查看应用程序源代码:
是什么导致该错误?(是的,我知道电子邮件中到处都是随机垃圾,但我认为utf8可以允许) 我该如何解决? 此修复程序可能产生什么影响? 我考虑的一件事是在打开二进制标志的情况下切换到utf8 varchar([some large number]),但我对MySQL并不熟悉,也不知道这样的修复是否有意义。
"\xE4\xC5\xCC\xC9\xD3\xD8"无效的UTF-8。使用Python测试:
"\xE4\xC5\xCC\xC9\xD3\xD8".decode("utf-8") ... UnicodeDecodeError: 'utf8' codec can't decode bytes in position 0-2: invalid data 如果您正在寻找避免解码数据库中错误的方法,则cp1252编码(又称“ Windows-1252”或“ Windows Western European”)是最宽松的编码-每个字节值都是一个有效的代码点。
当然,它不再会理解真正的UTF-8,也不会理解任何其他非cp1252编码,但是听起来您不太在意这一点?来源:stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。