中文字符无法插入数据库
在mysql终端可以自行插入一条中文信息;
但是在客户端浏览器中输入中文后台出现异常,异常如下:
org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: could not insert: [com.uisf.entity.UisfEmp]; uncategorized SQLException for SQL [insert into alex.uisf_emp (name, emp_no, dept) values (?, ?, ?)]; SQL state [HY000]; error code [1366]; Incorrect string value: '\xC2\x98\xC3\xA5\xC2\xAE...' for column 'name' at row 1; nested exception is java.sql.SQLException: Incorrect string value: '\xC2\x98\xC3\xA5\xC2\xAE...' for column 'name' at row 1
Caused by: java.sql.SQLException: Incorrect string value: '\xC2\x98\xC3\xA5\xC2\xAE...' for column 'name' at row 1
安装数据库设置的编码是utf8;
spring配置hiebernate的配置文件中也设置了utf8格式:
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="com.mysql.jdbc.Driver">
</property>
<property name="url"
value="jdbc:mysql://localhost:3306/alex?useUnicode=true&characterEncoding=utf-8">
</property>
<property name="username" value="root">
</property>
<property name="password" value="love0824">
</property>
</bean>;
在struts.xml中也设置了utf8的格式:
<constant name="struts.i18n.encoding" value="utf-8"></constant>
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html, charset=utf-8");
response.setCharacterEncoding("utf-8");
chain.doFilter(request, response);
}
在mysql终端可以自行插入一条中文信息;
但是在客户端浏览器中输入中文后台出现异常,异常如下:
org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: could not insert: [com.uisf.entity.UisfEmp]; uncategorized SQLException for SQL [insert into alex.uisf_emp (name, emp_no, dept) values (?, ?, ?)]; SQL state [HY000]; error code [1366]; Incorrect string value: '\xC2\x98\xC3\xA5\xC2\xAE...' for column 'name' at row 1; nested exception is java.sql.SQLException: Incorrect string value: '\xC2\x98\xC3\xA5\xC2\xAE...' for column 'name' at row 1
Caused by: java.sql.SQLException: Incorrect string value: '\xC2\x98\xC3\xA5\xC2\xAE...' for column 'name' at row 1
安装数据库设置的编码是utf8;
spring配置hiebernate的配置文件中也设置了utf8格式:
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="com.mysql.jdbc.Driver">
</property>
<property name="url"
value="jdbc:mysql://localhost:3306/alex?useUnicode=true&characterEncoding=utf-8">
</property>
<property name="username" value="root">
</property>
<property name="password" value="love0824">
</property>
</bean>;
在struts.xml中也设置了utf8的格式:
<constant name="struts.i18n.encoding" value="utf-8"></constant>
这个问题怎么解决啊;
楼主很急啊!
先用httpwatch看下传输过去的参数,是不是已经乱码了(是乱码的话,JSP页面的编码不对)。然后在后台debug时,也看下是不是乱码(是乱码的话,filter不起作用。把filter放到struts2的filter之前)。最后数据库是乱码的话,就是数据库的问题了
您说的是很精辟
我这边数据库没问题,可以在终端插入中文的数据
换了个过滤器之后,过滤器起作用了
从表单接收到的参数不是乱码
但是插入到数据库的却是乱码
先用httpwatch看下传输过去的参数,是不是已经乱码了(是乱码的话,JSP页面的编码不对)。然后在后台debug时,也看下是不是乱码(是乱码的话,filter不起作用。把filter放到struts2的filter之前)。最后数据库是乱码的话,就是数据库的问题了
您说的是很精辟
我这边数据库没问题,可以在终端插入中文的数据
换了个过滤器之后,过滤器起作用了
从表单接收到的参数不是乱码
但是插入到数据库的却是乱码
你能在终端插入中文的数据,不代表你的数据库是utf8编码
看一下数据库编码吧,插入到数据库是乱码基本是数据库编码的问题了
我安装数据库的时候设置的确实是utf-8