乱码有关问题解决
乱码问题解决
对的 我开始一直以为mysql的表单的字符集改成utf-8就可以了 结果发现整个数据库的都要改,我的问题就出在query上
在web表单里每次输入中文的firstName和lastName的时候,显示出来都是乱码,几乎可以认定是编码不统一的问题,可是一直都没找到问题的源头,查阅资料显示java内存默认的编码是iso8859-1 (也叫latin-1)不支持中文 , 而我在jsp界面设置的都是utf-8,可是看我myeclipse的设置里默认的都是gbk,貌似问题不在这儿,于是就不停的设置断点
每次都是到pStatement.setString(1, employee.getFirstName());时,明明emploee.getFirstName()取出来的是中文,一到PreparedStatement里就成了?号,那问题到底在哪儿呢,一个connction终于让我觉得问题貌似就在数据库方面,mysqlFront似乎都是正常的,抱着尝试的态度我使用了mysql的命令行,结果select发现中文字体在命令行都是??,难道是mysql默认编码的问题
于是进入mysql自带的config-MySQL Server Instance Config Wizard,意外发现默认编码是latin1,突然心情小激动了下,果断改成utf-8,一切就绪,如我所料,搞定中文乱码,都是mysql默认编码不支持中文惹的祸,内牛满面
附上关键代码:
private static final String CREATE_EMPLOYEE_SQL = "INSERT INTO employees (firstName,lastName) VALUES (?, ?)"; public void createEmployee(Employee employee) throws DAOException { Connection connection = null; PreparedStatement pStatement = null; try { connection = getConnection(); // mysql的默认编码设置为utf-8,否则不能传入中文字符 pStatement = connection.prepareStatement(CREATE_EMPLOYEE_SQL); pStatement.setString(1, employee.getFirstName()); pStatement.setString(2, employee.getLastName()); System.out.println("运行到employee.getFirstName() :"+ employee.getFirstName()); pStatement.executeUpdate(); pStatement.close(); } catch (SQLException ex) { throw new DAOException(); } finally { try { connection.close(); } catch (SQLException ex) { throw new DAOException(); } } }
结果图:
1 楼
Technoboy
2011-05-11
mysql从列,表,数据库,mysqld,Connection,query,resultSet都存在字符集和字符集的校验。不同容器,中间件默认字符集也不同,tomcat默认的字符集为iso-8859-1。浏览器也有字符集,会在选择字符集的基础上两次encode,服务器就需要两次的decode,包括一次容器的decode。还需要一次显示的decode。
2 楼
加州板栗
2011-05-11
Technoboy 写道
mysql从列,表,数据库,mysqld,Connection,query,resultSet都存在字符集和字符集的校验。不同容器,中间件默认字符集也不同,tomcat默认的字符集为iso-8859-1。浏览器也有字符集,会在选择字符集的基础上两次encode,服务器就需要两次的decode,包括一次容器的decode。还需要一次显示的decode。
对的 我开始一直以为mysql的表单的字符集改成utf-8就可以了 结果发现整个数据库的都要改,我的问题就出在query上