在注意到一个应用程序倾向于由于不正确的字符串值错误而丢弃随机电子邮件之后,我仔细检查并切换了许多文本列,以使用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并不熟悉,也不知道这样的修复是否有意义。