`
加州板栗
  • 浏览: 25995 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

乱码问题解决

阅读更多

   在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();
			}
		}
	}

 结果图:

  • 大小: 73 KB
0
1
分享到:
评论
2 楼 加州板栗 2011-05-11  
Technoboy 写道
mysql从列,表,数据库,mysqld,Connection,query,resultSet都存在字符集和字符集的校验。不同容器,中间件默认字符集也不同,tomcat默认的字符集为iso-8859-1。浏览器也有字符集,会在选择字符集的基础上两次encode,服务器就需要两次的decode,包括一次容器的decode。还需要一次显示的decode。

对的 我开始一直以为mysql的表单的字符集改成utf-8就可以了 结果发现整个数据库的都要改,我的问题就出在query上
1 楼 Technoboy 2011-05-11  
mysql从列,表,数据库,mysqld,Connection,query,resultSet都存在字符集和字符集的校验。不同容器,中间件默认字符集也不同,tomcat默认的字符集为iso-8859-1。浏览器也有字符集,会在选择字符集的基础上两次encode,服务器就需要两次的decode,包括一次容器的decode。还需要一次显示的decode。

相关推荐

Global site tag (gtag.js) - Google Analytics