Estou enfrentando um problema que parece ser um problema com as limitações do mysql 5.1s em caracteres UTF8.
De 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.
Nosso aplicativo está lançando exceções periódicas como
java.sql.SQLException: Incorrect string value: '\xF4\x80\x82\x8C ...'
A solução definitiva parece estar migrando para 5.5, que suporta UTF-8 > 3 bytes
Infelizmente, isso não seria tão simples quanto devolver as instâncias em binários mais recentes. Sendo um despejo de versão principal, precisaríamos fazer um recarregamento de despejo completo, o que exigiria algum tempo de inatividade programado.
Alguém já teve que lidar com essa situação antes? Existem boas alternativas de trabalho?
A abordagem ingênua parece ser fazer com que o aplicativo pesquise e substitua as sequências de vários bytes por pontos de interrogação ou � . Isso parece bastante hacky e não é uma opção muito palatável para mim ou para os desenvolvedores.
Opinião
Provavelmente é melhor lançar uma exceção durante a verificação de entrada de seus aplicativos e não passar a responsabilidade para o banco de dados.
Gambiarra
Existe uma "solução alternativa", mas sua milhagem pode variar: http://forge.mysql.com/worklog/task.php?id=3780
Força Bruta?
Você pode converter o campo VARCHAR da tabela de front-end em um BLOB e armazenar como dados binários para resolver o problema atual. ...e, claro, isso convida a uma série de outros problemas usando BLOBs em vez de VARCHAR.
Atualizando
UTF32 pode resolver o problema e atualizar para 5.5.x não é tão difícil quanto você pensa. Crie um escravo replicado (farm), sincronize e promova-o a mestre.