环境:mysql5.0,jdbc3.1.13;
mysql环境设置:
set character_set_database = utf8;
SET character_set_client = gbk;
SET character_set_results = gbk;
SET character_set_connection = gbk;
set character_set_server = latin1; jdbc连接数据库设置:;useUnicode=true&characterEncoding=gbk; 页面提交中文数据,servlet得到数据的时候是ISO8859_1,
把这个数据编码一下 String test = new String(xxxx.getBytes("ISO8859_1"), "GBk");
test是gbk编码,打印出来是中文.[假设test='中文字符']
把这个数据通过jdbc写入(insert tableName set rowName = '中文字符';)mysql数据库, 在数据库中看到的数据就是乱码.如果直接在mysql的客户端执行 insert tableName set rowName = '中文字符';中文就不出现乱码.
取出数据也不会出现乱码. 查了很多资料,都没有找到答案,弄的晕死我了,不知道为什么写入的时候会出现乱码.
//jdbc驱动还试过3.1.7,
数据库编码,试过big5,utf8,latin1,
String test = new String(xxxx.getBytes("ISO8859_1"), "GBk");试过不编码的
useUnicode=true&characterEncoding=gbk;试过useUnicode=true&characterEncoding=gb2312/utf8;
mysql环境设置:
set character_set_database = utf8;
SET character_set_client = gbk;
SET character_set_results = gbk;
SET character_set_connection = gbk;
set character_set_server = latin1; jdbc连接数据库设置:;useUnicode=true&characterEncoding=gbk; 页面提交中文数据,servlet得到数据的时候是ISO8859_1,
把这个数据编码一下 String test = new String(xxxx.getBytes("ISO8859_1"), "GBk");
test是gbk编码,打印出来是中文.[假设test='中文字符']
把这个数据通过jdbc写入(insert tableName set rowName = '中文字符';)mysql数据库, 在数据库中看到的数据就是乱码.如果直接在mysql的客户端执行 insert tableName set rowName = '中文字符';中文就不出现乱码.
取出数据也不会出现乱码. 查了很多资料,都没有找到答案,弄的晕死我了,不知道为什么写入的时候会出现乱码.
//jdbc驱动还试过3.1.7,
数据库编码,试过big5,utf8,latin1,
String test = new String(xxxx.getBytes("ISO8859_1"), "GBk");试过不编码的
useUnicode=true&characterEncoding=gbk;试过useUnicode=true&characterEncoding=gb2312/utf8;
1、使用转码后的test,执行sql语句"insert tableName set rowName = '"+test+"'",看看数据库中是不是乱码
2、直接在servlet中写sql语句"insert tableName set rowName = '测试'",看看是不是乱码。
因为你的应用服务器环境是iso的,你又使用了中文字符和数据库连接,所以可能会有些问题,最好的解决方法是将应用服务器环境也改成gbk的。
String sql1 = new String(sql.getBytes(
"gbk"), "ISO8859_1");
String sql2 = new String(sql.getBytes(
"ISO8859_1"), "gbk");
try {
pb = new PoolBean();
conn = pb.getConnection();
pst = conn.prepareStatement(sql);///这里用sql,sql1,sql2,写入都是乱码
int is = pst.executeUpdate();
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;public class SetCharacterEncodingFilter implements Filter { public void init(FilterConfig config) { } public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("gb2312");
chain.doFilter(request, response);
} public void destroy() { }
}
然后配置web.xml
<web-app>后加上
=============<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>SetCharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
my.ini内容如下:
[WinMySQLAdmin]
Server=D:/mysql/bin/mysqld-nt.exe[mysqld]
basedir=D:/mysql
datadir=D:/mysql-data/datadefault-character-set=gbk[client]
default-character-set=gbk我机器上把MYSQL放到D盘了,你根据自己装的位置配制一下!
import javax.servlet.http.*;import org.apache.struts.action.*;public class CodeActionServlet extends ActionServlet {
String CharsetName;
public void init(ServletConfig config) throws ServletException {
super.init(config);
CharsetName = config.getInitParameter("CharsetName");
//获得在Web.xml文件中的字符集,中文为GB2312,台湾为MS950
} public void process(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException {
try {
request.setCharacterEncoding(CharsetName);
} catch (UnsupportedEncodingException e) {
System.out.println(e.toString());
}
super.process(request, response);
}
}
这样就可以保证你写入数据库的不会是乱码,读取也就没问题了
http://www.blogjava.net/rickhunter/articles/33571.html
1: 安装MySQL数据库时候就指定字符集合为gbk或者gb2312,只要数据库中显示正常中文字符的话,页面肯定显示正常,哪来这么多的转换,烦死了!!
2: 指定服务器的 编码 GBK 或者GB23123: 修改安装目录下的 初始化配置文件 my.ini# The TCP/IP Port the MySQL Server will listen on
port=3306
#Path to installation directory. All paths are usually resolved relative to this.
basedir="E:/MySQL5/"#Path to the database root
datadir="E:/MySQL5/Data/"# The default character set that will be used when a new schema or table is
# created and no character set is defined
default-character-set=latin1 换成 gbk 或者 gb2312# The default storage engine that will be used when create new tables when
default-storage-engine=INNODB