视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Linux平台中MySQL的JDBC中文问题解决
2020-11-09 12:30:14 责编:小采
文档


除了众所周知的中文问题之外,Linux平台中的mysql实例可能遇到这样的问题: 你使用mysql5x版本并且配置数据库使用UTF-8字符集,你

除了众所周知的中文问题之外,Linux平台中的mysql实例可能遇到这样的问题:

你使用mysql5x版本并且配置数据库使用UTF-8字符集,你使用linux标准的jdk环境,你使用一个足够高的mysql jdbc driver,你使用UTF-8字符集做为J2EE的基本字符集。你使用了很标准的CharacterEncodingFilter完成透明的字符集转换。

这样,你在大多数情况下已经没有感受到中文问题对Java应用的干扰了,但偏偏在保存一个表单的时候发现中文被保存成了乱码或者问号。

究其原因,这是mysql驱动的一个已知的BUG,我没能找到(没去找)原始的BUG报告,但其大意为,jdbc driver可能没有能够正确识别jdbc url中的dash字符。

如果你为test数据库指定了默认的整理类型到“UTF-8”的话(例如 alter database test character set utf8;),往往从数据库中读取数据是能够自动采用正确的解码序列的,所以你的Java应用在“只读状态”下一切都显得那么的正常,直到你在尝试提交表单的时候,该问题才暴露出来。

解决的办法是用“UTF8”替代URL中的“UTF-8”,避开上述的陷阱。

另外一个附加的问题,JDBC URL对参数的分隔是使用“&”字符而不是“&”字符,若是你在URL中写了“&”的话,同样会使得后面的参数不能正确应用到driver layer上。这个问题比较复杂,原因是你在不同位置书写URL的时候可能需要进行转义的:

1. 在xml文件中写URL的时候,应该加上&,原因是xml认为&是转义符的引导字符,因此你写user=root&password=xxx到xml中时,等价于在java源代码中写user=root&password=xxx。

2. 在properties文件中写URL的时候,&没有转义含义,因此这时候的URL和Java源代码中的URL格式基本一致。所谓的基本一致,涉及到另外一个特殊字符“:”,,在properties中,用“\:”转义序列表示一个“:”是可选的,也就是说很多时候,你可以混用这两个格式。

下载本文
显示全文
专题