在发现一个应用程序由于错误的字符串值而倾向于丢弃随机电子邮件后,我检查了许多文本列,使用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([某个大数]),但我对MySQL并不熟悉,也不知道这样的解决方案是否可行。