在MYSQL Browser中执行此命令时,我有以下内容
'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', '/usr/share/mysql/charsets/'
但是,当我将这样的东西称为我的servlet时,它会保存为乱码
http://something.com/TestServlet/test?cmd=1&id=999&content=%E6%90%9C%E7%8B%97%E6%90%9C
最后的字符是中文字符。
我在servlet中使用此代码将内容作为UTF8
OutputStream ostream = response.getOutputStream();
PrintStream out = new PrintStream(ostream, true, "UTF8");
String content = request.getParameter("content");
然后我在数据库上调用一个类似于db.insert(content)的插入;这当然是假的。
我甚至将?useUnicode=true&characterEncoding=UTF-8
添加到我的连接字符串中但无济于事。
答案 0 :(得分:1)
我的猜测: 尝试在数据库连接上发送初始命令:SET NAMES'utf8'
答案 1 :(得分:0)
检查您的MySQL配置并确保正确定义了您的编码。将这些行添加到MySQL配置文件(my.cnf)。这些设置应该有效:
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
default-character-set=utf8
character-set-server=utf8
答案 2 :(得分:0)
问题在于tomcat方必须在server.xml中为连接添加URI-Encoding = UTF-8。
答案 3 :(得分:0)
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter(); // Simpler
request.setEncoding("UTF-8");