MySql中文编码问题!! 求指教

时间:2022-09-22 18:52:56
jsp页面中编码设置成Charset=utf-8,mysql数据库中default-character-set=utf8
现在插入记录时报Incorrect string value(错误的字符串值);
截了图,求帮忙是哪里错了......

mysql> show variables like "%colla%";
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)

mysql> show variables like "%char%";
+--------------------------+----------------------------------------------------
-----+
| Variable_name            | Value
     |
+--------------------------+----------------------------------------------------
-----+
| character_set_client     | utf8
     |
| character_set_connection | utf8
     |
| character_set_database   | utf8
     |
| character_set_filesystem | binary
     |
| character_set_results    | utf8
     |
| character_set_server     | utf8
     |
| character_set_system     | utf8
     |
| character_sets_dir       | C:\Program Files\MySQL\MySQL Server 5.5\share\chars
ets\ |
+--------------------------+----------------------------------------------------
-----+
8 rows in set (0.00 sec)


16 个解决方案

#1


jsp 页面中有三个地方设置编码,你都设置成了UTF-8吗?
<%@ page language="java" contentType="text/html;  charset=utf-8"
import="java.util.*"  pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%-- <%@ taglib uri="/struts-dojo-tags" prefix="sx"%> --%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<sx:head locale="zh_CN" parseContent="true" extraLocales="zh" />
<base href="<%=basePath%>">

<title>My JSP 'addGoods.jsp' starting page</title>
<meta http-equiv="Content-Type" content="text/html;  charset=utf-8">
(下面的省略)

#2


设置上了!结果还是一样啊。

#3


你确认是中文乱码造成的?不是字段类型的错误?

#4


User类中name属性设置的是String类型啊! 数据库中用的是varchar类型,结果查数据的时候

ERROR 1366 (HY000): Incorrect string value: '\xC9\xCF\xC8\xFD' for column 'name'

字段类型应该不会错啊!

#5


你的sql语句呢??是不是其他的问题,跟字符集无关。。。

#6


引用 4 楼 u011139190 的回复:
User类中name属性设置的是String类型啊! 数据库中用的是varchar类型,结果查数据的时候

ERROR 1366 (HY000): Incorrect string value: '\xC9\xCF\xC8\xFD' for column 'name'

字段类型应该不会错啊!

你这乱码奇怪。
有没有异常信息?如果有把异常信息贴出来看看。另外,你这个是jsp跳jsp出现乱码,还是servlet跳jsp出现乱码?还是其它情况?

#7


这个用的是Hibernate框架对数据库进行操作的

语句都打印出来了

Hibernate: 
    insert 
    into
        student.user
        (name, password, age, sex, province, city) 
    values
        (?, ?, ?, ?, ?, ?)


#8


引用 6 楼 huhui_bj 的回复:
Quote: 引用 4 楼 u011139190 的回复:

User类中name属性设置的是String类型啊! 数据库中用的是varchar类型,结果查数据的时候

ERROR 1366 (HY000): Incorrect string value: '\xC9\xCF\xC8\xFD' for column 'name'

字段类型应该不会错啊!

你这乱码奇怪。
有没有异常信息?如果有把异常信息贴出来看看。另外,你这个是jsp跳jsp出现乱码,还是servlet跳jsp出现乱码?还是其它情况?



HTTP Status 500 - Hibernate operation: could not insert: [entity.User]; uncategorized SQLException for SQL [insert into student.user (name, password, age, sex, province, city) values (?, ?, ?, ?, ?, ?)]; SQL state [HY000]; error code [1366]; Incorrect string value: '\xE5\xBC\xA0\xE4\xB8\x89' for column 'name' at row 1; nested exception is java.sql.SQLException: Incorrect string value: '\xE5\xBC\xA0\xE4\xB8\x89' for column 'name' at row 1
表单提交后,交给一个action处理 ,result给了一个Jsp页面。

#9


引用 4 楼 u011139190 的回复:
User类中name属性设置的是String类型啊! 数据库中用的是varchar类型,结果查数据的时候

ERROR 1366 (HY000): Incorrect string value: '\xC9\xCF\xC8\xFD' for column 'name'

字段类型应该不会错啊!
哦,好吧,那就是乱码了,跟踪下到那步开始乱的~

#10


你本来的name值就是\xC9\xCF\xC8\xFD?还是转码的?
这个可能超长了啊。。。

#11


service业务逻辑层调用userDao中的save()方式开始出问题了

exception

org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: could not insert: [entity.User]; uncategorized SQLException for SQL [insert into student.user (name, password, age, sex, province, city) values (?, ?, ?, ?, ?, ?)]; SQL state [HY000]; error code [1366]; Incorrect string value: '\xE5\xBC\xA0\xE4\xB8\x89' for column 'name' at row 1; nested exception is java.sql.SQLException: Incorrect string value: '\xE5\xBC\xA0\xE4\xB8\x89' for column 'name' at row 1
org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:83)
org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
org.springframework.orm.hibernate3.HibernateAccessor.convertJdbcAccessException(HibernateAccessor.java:424)
org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:410)
org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:424)
org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTemplate.java:694)
dao.HibernateUserDao.save(HibernateUserDao.java:9)

#12


引用 8 楼 u011139190 的回复:
Quote: 引用 6 楼 huhui_bj 的回复:

Quote: 引用 4 楼 u011139190 的回复:

User类中name属性设置的是String类型啊! 数据库中用的是varchar类型,结果查数据的时候

ERROR 1366 (HY000): Incorrect string value: '\xC9\xCF\xC8\xFD' for column 'name'

字段类型应该不会错啊!

你这乱码奇怪。
有没有异常信息?如果有把异常信息贴出来看看。另外,你这个是jsp跳jsp出现乱码,还是servlet跳jsp出现乱码?还是其它情况?



HTTP Status 500 - Hibernate operation: could not insert: [entity.User]; uncategorized SQLException for SQL [insert into student.user (name, password, age, sex, province, city) values (?, ?, ?, ?, ?, ?)]; SQL state [HY000]; error code [1366]; Incorrect string value: '\xE5\xBC\xA0\xE4\xB8\x89' for column 'name' at row 1; nested exception is java.sql.SQLException: Incorrect string value: '\xE5\xBC\xA0\xE4\xB8\x89' for column 'name' at row 1
表单提交后,交给一个action处理 ,result给了一个Jsp页面。

你的问题是这样的,表单提交给action的时候,由于提交name值的是乱码,导致hibernate做数据库插入操作抛出异常。
我给你的解决方案有两个,第一个是配置struts2的编码
第二个是用过滤器Filter。
请移步 http://www.360doc.com/content/08/0424/10/61497_1212275.shtml

#13


引用 10 楼 flagiris 的回复:
你本来的name值就是\xC9\xCF\xC8\xFD?还是转码的?
这个可能超长了啊。。。

超长??? 不太理解, 我设置的范围在20 varchar(20);

#14


action里面设置字符编码

#15


引用 12 楼 huhui_bj 的回复:
Quote: 引用 8 楼 u011139190 的回复:

Quote: 引用 6 楼 huhui_bj 的回复:

Quote: 引用 4 楼 u011139190 的回复:

User类中name属性设置的是String类型啊! 数据库中用的是varchar类型,结果查数据的时候

ERROR 1366 (HY000): Incorrect string value: '\xC9\xCF\xC8\xFD' for column 'name'

字段类型应该不会错啊!

你这乱码奇怪。
有没有异常信息?如果有把异常信息贴出来看看。另外,你这个是jsp跳jsp出现乱码,还是servlet跳jsp出现乱码?还是其它情况?



HTTP Status 500 - Hibernate operation: could not insert: [entity.User]; uncategorized SQLException for SQL [insert into student.user (name, password, age, sex, province, city) values (?, ?, ?, ?, ?, ?)]; SQL state [HY000]; error code [1366]; Incorrect string value: '\xE5\xBC\xA0\xE4\xB8\x89' for column 'name' at row 1; nested exception is java.sql.SQLException: Incorrect string value: '\xE5\xBC\xA0\xE4\xB8\x89' for column 'name' at row 1
表单提交后,交给一个action处理 ,result给了一个Jsp页面。

你的问题是这样的,表单提交给action的时候,由于提交name值的是乱码,导致hibernate做数据库插入操作抛出异常。
我给你的解决方案有两个,第一个是配置struts2的编码
第二个是用过滤器Filter。
请移步 http://www.360doc.com/content/08/0424/10/61497_1212275.shtml


 Thank you! 原来是action中没有设置编码格式。

#16


引用 14 楼 splendid_java 的回复:
action里面设置字符编码

Thank you

#1


jsp 页面中有三个地方设置编码,你都设置成了UTF-8吗?
<%@ page language="java" contentType="text/html;  charset=utf-8"
import="java.util.*"  pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%-- <%@ taglib uri="/struts-dojo-tags" prefix="sx"%> --%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<sx:head locale="zh_CN" parseContent="true" extraLocales="zh" />
<base href="<%=basePath%>">

<title>My JSP 'addGoods.jsp' starting page</title>
<meta http-equiv="Content-Type" content="text/html;  charset=utf-8">
(下面的省略)

#2


设置上了!结果还是一样啊。

#3


你确认是中文乱码造成的?不是字段类型的错误?

#4


User类中name属性设置的是String类型啊! 数据库中用的是varchar类型,结果查数据的时候

ERROR 1366 (HY000): Incorrect string value: '\xC9\xCF\xC8\xFD' for column 'name'

字段类型应该不会错啊!

#5


你的sql语句呢??是不是其他的问题,跟字符集无关。。。

#6


引用 4 楼 u011139190 的回复:
User类中name属性设置的是String类型啊! 数据库中用的是varchar类型,结果查数据的时候

ERROR 1366 (HY000): Incorrect string value: '\xC9\xCF\xC8\xFD' for column 'name'

字段类型应该不会错啊!

你这乱码奇怪。
有没有异常信息?如果有把异常信息贴出来看看。另外,你这个是jsp跳jsp出现乱码,还是servlet跳jsp出现乱码?还是其它情况?

#7


这个用的是Hibernate框架对数据库进行操作的

语句都打印出来了

Hibernate: 
    insert 
    into
        student.user
        (name, password, age, sex, province, city) 
    values
        (?, ?, ?, ?, ?, ?)


#8


引用 6 楼 huhui_bj 的回复:
Quote: 引用 4 楼 u011139190 的回复:

User类中name属性设置的是String类型啊! 数据库中用的是varchar类型,结果查数据的时候

ERROR 1366 (HY000): Incorrect string value: '\xC9\xCF\xC8\xFD' for column 'name'

字段类型应该不会错啊!

你这乱码奇怪。
有没有异常信息?如果有把异常信息贴出来看看。另外,你这个是jsp跳jsp出现乱码,还是servlet跳jsp出现乱码?还是其它情况?



HTTP Status 500 - Hibernate operation: could not insert: [entity.User]; uncategorized SQLException for SQL [insert into student.user (name, password, age, sex, province, city) values (?, ?, ?, ?, ?, ?)]; SQL state [HY000]; error code [1366]; Incorrect string value: '\xE5\xBC\xA0\xE4\xB8\x89' for column 'name' at row 1; nested exception is java.sql.SQLException: Incorrect string value: '\xE5\xBC\xA0\xE4\xB8\x89' for column 'name' at row 1
表单提交后,交给一个action处理 ,result给了一个Jsp页面。

#9


引用 4 楼 u011139190 的回复:
User类中name属性设置的是String类型啊! 数据库中用的是varchar类型,结果查数据的时候

ERROR 1366 (HY000): Incorrect string value: '\xC9\xCF\xC8\xFD' for column 'name'

字段类型应该不会错啊!
哦,好吧,那就是乱码了,跟踪下到那步开始乱的~

#10


你本来的name值就是\xC9\xCF\xC8\xFD?还是转码的?
这个可能超长了啊。。。

#11


service业务逻辑层调用userDao中的save()方式开始出问题了

exception

org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: could not insert: [entity.User]; uncategorized SQLException for SQL [insert into student.user (name, password, age, sex, province, city) values (?, ?, ?, ?, ?, ?)]; SQL state [HY000]; error code [1366]; Incorrect string value: '\xE5\xBC\xA0\xE4\xB8\x89' for column 'name' at row 1; nested exception is java.sql.SQLException: Incorrect string value: '\xE5\xBC\xA0\xE4\xB8\x89' for column 'name' at row 1
org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:83)
org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
org.springframework.orm.hibernate3.HibernateAccessor.convertJdbcAccessException(HibernateAccessor.java:424)
org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:410)
org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:424)
org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTemplate.java:694)
dao.HibernateUserDao.save(HibernateUserDao.java:9)

#12


引用 8 楼 u011139190 的回复:
Quote: 引用 6 楼 huhui_bj 的回复:

Quote: 引用 4 楼 u011139190 的回复:

User类中name属性设置的是String类型啊! 数据库中用的是varchar类型,结果查数据的时候

ERROR 1366 (HY000): Incorrect string value: '\xC9\xCF\xC8\xFD' for column 'name'

字段类型应该不会错啊!

你这乱码奇怪。
有没有异常信息?如果有把异常信息贴出来看看。另外,你这个是jsp跳jsp出现乱码,还是servlet跳jsp出现乱码?还是其它情况?



HTTP Status 500 - Hibernate operation: could not insert: [entity.User]; uncategorized SQLException for SQL [insert into student.user (name, password, age, sex, province, city) values (?, ?, ?, ?, ?, ?)]; SQL state [HY000]; error code [1366]; Incorrect string value: '\xE5\xBC\xA0\xE4\xB8\x89' for column 'name' at row 1; nested exception is java.sql.SQLException: Incorrect string value: '\xE5\xBC\xA0\xE4\xB8\x89' for column 'name' at row 1
表单提交后,交给一个action处理 ,result给了一个Jsp页面。

你的问题是这样的,表单提交给action的时候,由于提交name值的是乱码,导致hibernate做数据库插入操作抛出异常。
我给你的解决方案有两个,第一个是配置struts2的编码
第二个是用过滤器Filter。
请移步 http://www.360doc.com/content/08/0424/10/61497_1212275.shtml

#13


引用 10 楼 flagiris 的回复:
你本来的name值就是\xC9\xCF\xC8\xFD?还是转码的?
这个可能超长了啊。。。

超长??? 不太理解, 我设置的范围在20 varchar(20);

#14


action里面设置字符编码

#15


引用 12 楼 huhui_bj 的回复:
Quote: 引用 8 楼 u011139190 的回复:

Quote: 引用 6 楼 huhui_bj 的回复:

Quote: 引用 4 楼 u011139190 的回复:

User类中name属性设置的是String类型啊! 数据库中用的是varchar类型,结果查数据的时候

ERROR 1366 (HY000): Incorrect string value: '\xC9\xCF\xC8\xFD' for column 'name'

字段类型应该不会错啊!

你这乱码奇怪。
有没有异常信息?如果有把异常信息贴出来看看。另外,你这个是jsp跳jsp出现乱码,还是servlet跳jsp出现乱码?还是其它情况?



HTTP Status 500 - Hibernate operation: could not insert: [entity.User]; uncategorized SQLException for SQL [insert into student.user (name, password, age, sex, province, city) values (?, ?, ?, ?, ?, ?)]; SQL state [HY000]; error code [1366]; Incorrect string value: '\xE5\xBC\xA0\xE4\xB8\x89' for column 'name' at row 1; nested exception is java.sql.SQLException: Incorrect string value: '\xE5\xBC\xA0\xE4\xB8\x89' for column 'name' at row 1
表单提交后,交给一个action处理 ,result给了一个Jsp页面。

你的问题是这样的,表单提交给action的时候,由于提交name值的是乱码,导致hibernate做数据库插入操作抛出异常。
我给你的解决方案有两个,第一个是配置struts2的编码
第二个是用过滤器Filter。
请移步 http://www.360doc.com/content/08/0424/10/61497_1212275.shtml


 Thank you! 原来是action中没有设置编码格式。

#16


引用 14 楼 splendid_java 的回复:
action里面设置字符编码

Thank you