Mysql5写中文乱码问题解决

2016-01-29 14:49 3 1 收藏

Mysql5写中文乱码问题解决,Mysql5写中文乱码问题解决

【 tulaoshi.com - MySQL 】

我插入Mysql5的中文一直是乱码。
但是直接使用mysqlAdmin,EMS等工具插入DB就不是乱码。而且我还可以使用程序正常地读出来。

原因是:
DBDriverClass=com.mysql.jdbc.Driver
DBURL=jdbc:mysql://10.4.2.52:3306/srx?useUnicode=true&characterEncoding=utf-8
这样的URL中useUnicode=true和characterEncoding=utf-8两个属性都不好用。

所以,数据库服务器无法从URL中获知Client使用了哪个编码。于是就使用数据库服务器上默认的latin也就是iso-8859-1编码来解析用户发送的sql语句。这样,原本用户是用操作系统的编码,但是服务器硬给转成ISO-8859-1,所以就乱码了。

Client端只要配置好
useUnicode=true
characterEncoding=utf-8
这两个属性。只要指定了,就不会乱码。utf-8可以,gb2312可以,gbk可以。指定了什么,Client就默认以这种
编码转换SQL语句,服务器也就知道怎么转会去。


怎么看客户端发送给服务器的SQL使用什么编码呢?

在客户端写个程序,执行SQL语句:
public void select() throws SQLException {
        ResultSet rs = this.cnn.createStatement().executeQuery("SHOW VARIABLES LIKE 'character_set_%'");
        while(rs.next()){
            System.out.println(rs.getString(1)+","+rs.getString(2));
        }
        rs.close();
    }
没有配置characterEncoding=utf-8之前,我使用的是DBURL=jdbc:mysql://10.4.2.52:3306/srx?useUnicode=true&characterEncoding=utf-8 这样的配置。结果用select()方法查询结果如下:

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/mysql/)

character_set_client,latin1
character_set_connection,latin1
character_set_database,utf8
character_set_filesystem,binary
character_set_results,
character_set_server,latin1
character_set_system,utf8
character_sets_dir,/usr/local/mysql-standard-5.0.27-Linux-i686/share/mysql/charsets/

注意第一行就可以了,可见使用的是latin1。

而latin1本身就无法表示汉字,经过这个编码打包的SQL语句发给Server,Server也用Latin1解析也无法还原。

所以,我总是写乱码到DB。

而配置了配置characterEncoding=utf-8之后,
执行select(),结果:
character_set_client,utf8
character_set_connection,utf8
character_set_database,utf8
character_set_filesystem,binary
character_set_results,
character_set_server,latin1
character_set_system,utf8
character_sets_dir,/usr/local/mysql-standard-5.0.27-linux-i686/share/mysql/charsets/

第一行为utf-8,SQL将用UTF8打包给Server,Server也用Client配置的UTF8
解析。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/mysql/)

来源:https://www.tulaoshi.com/n/20160129/1494319.html

延伸阅读
标签: Web开发
内码问题.用这段代码的吧,我已经改得很精简了. 使用XMLHTTP抓取地址并进次内容处理 以下为引用的内容: Function GetBody(Url) Dim objXML On Error Resume Next Set objXML = CreateObject("Microsoft.XMLHTTP") With objXML .Open "Get", Url, False, "", "" .Send GetBody = .ResponseBody End With GetBody=BytesToBstr(GetBody,"GB...
相信大家解决了中文输入后一定会遇到如何解决中文输入的问题,中文输入换行问题是很多gui框架都存在的一个问题,这里不废话了,大家打开mygui的引擎层中的widget的textview 的头文件和源文件将其替换为: 代码如下: /*! @file @author Albert Semenov @date 09/2009 */ #ifndef __MYGUI_TEXT_VIEW_DATA_H__ #define __MYGUI_TEXT_VIEW...
《死亡空间3》延迟乱码问题解决方法 如果发现一直处在瞄准状态,请取消大写锁定。 如果蓝屏,请自行调节画质为自定义或最低。 鼠标有延迟是因为从xbox移植没有去掉鼠标平滑。 汉化提示错误的请重装游戏重打注册表再汉化。 乱码问题查看有无卸载关键字库,死亡空间3汉化字体应该是雅黑,那就重打雅黑字库。 以上两条若尝试无效则等待新版...
标签: Web开发
我开发基于 eclipse3.2+j2ee5.0 +tomcat5.09+mysql5.0 一、表单POST的数据的中文乱码解决      这类型的数据中文可以通过filters来实时过滤。filters代码如下: package filters; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; i...
如果是windows系统,那么系统默认的本地字符集是gb2312,为了让数据表也使用gb2312字符集,我们要这样编写创建数据表的SQL语句: 代码如下: CREATE TABLE TEST {  ...  ...  ... }default character set gb2312; 然后在hibernate.cfg.xml中加上: 代码如下: property name="connection.characterEncoding"gb2312/property ...

经验教程

104

收藏

36
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部