我有一个java web项目,在windows下运行的好好的,放到linux下却出现了各种问题。 去看了下数据库(mysql),发现新插入的中文数据都成了问号乱码。费解了,我的项目一条龙的全是UTF-8编码:所有文件的编码用UTF-8,所有页面用UTF-8,数据库UTF-8。乱码是从哪个环节来的呢?我用junit测试程序试着向数据库插了些中文数据,到数据里全成了问号乱码,看来是向数据库插入时出现了乱码。
我依然费解,到网上查了好久,看到个和我的麻烦类似的问题,他说在数据库的链接url上指定一个编码方式可以解决问题,比如:jdbc:mysql://localhost:3308/taxdb?characterEncoding=utf-8。但是我不是用这种url的方式去连接数据,我是用datasource(com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource的一个实例)的方法一个个指定数据库的连接参数的。后来去查了下datasource看看有没有能指定编码的方法,还真发现了一个方法:setCharacterEncoding(Sting chartset)。在代码里加上:
dataSource.setCharacterEncoding("UTF-8");
再运行项目,果然行了。但是到现在为止,我还不知道,为什么要这样做。