将UTF-8插入MySQL会产生乱码

时间:2011-12-02 14:10:00

标签: java mysql

在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添加到我的连接字符串中但无济于事。

搜索搜在mysql查询浏览器中显示为æçæ

4 个答案:

答案 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");