我遇到了一个问题,似乎是 mysql 5.1s 对 UTF8 字符的限制。
来自http://dev.mysql.com/doc/refman/5.1/en/charset-unicode-utf8.html
Currently, MySQL support for UTF-8 does not include 4-byte sequences.
我们的应用程序正在抛出周期性异常,例如
java.sql.SQLException: Incorrect string value: '\xF4\x80\x82\x8C ...'
最终的解决方案看起来是迁移到支持 UTF-8 > 3 字节的5.5
不幸的是,这不会像在较新的二进制文件下反弹实例那么简单。作为主要版本转储,我们需要进行完整的转储重新加载,这将需要一些计划的停机时间。
以前有没有其他人不得不处理这种情况?有什么好的解决办法吗?
天真的方法似乎是让应用程序搜索并用问号或 � 替换多字节序列。这似乎很老套,对我或开发人员来说不是一个非常可口的选择。
观点
最好在应用程序输入检查期间抛出异常,而不是将责任推给数据库。
解决方法
有一个“解决方法”,但你的里程可能会有所不同:http: //forge.mysql.com/worklog/task.php?id=3780
蛮力?
您可以将前端表 VARCHAR 字段转换为 BLOB 并存储为二进制数据以解决当前问题。...当然,使用 BLOB 而不是 VARCHAR 会引发许多其他问题。
升级
UTF32 可以解决这个问题,升级到 5.5.x 并不像你想象的那么难。创建一个复制的从属(农场),同步并将其提升为主控。