这几天遇到Mysql数据落库报编码错误:
Caused by: java.sql.BatchUpdateException: Incorrect string value: '\xF0\x9F\x98\x8A',...' for column 'statement_text' at row 1
Caused by: java.sql.BatchUpdateException: Incorrect string value: '\xF0\xA0\x81\x81%'...' for column 'statement_sample' at row 1
网上提供了大部分的解决方法是修改数据库配置,但是数据库如果使用连接池,无法保证其他连接时不指定utf-8,所以避免不了其他连接污染连接池。这里给出另一种解决方法,过滤掉特殊字符。
1 UTF-8编码分段
UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,也是一种前缀码。它可以用来表示Unicode标准中的任何字符,且其编码中的第一个字节仍与ASCII兼容,这使得原来处理ASCII字符的软件无须或只须做少部分修改,即可继续使用。因此,它逐渐成为电子邮件、网页及其他存储或发送文字优先采用的编码。
1.0 符号查询方法
http://www.fileformat.info/info/unicode/char/xxxxx/index.htm
替换xxxx为需要查询的字符16进制编码
例如emoji的SMILING FACE的编码为1f60a:查询地址
字符a的编码为61:查询地址
1.1 Ascii
128个US-ASCII字符只