看到一篇很好的文章,转录于此

中文乱码似乎是程序编写中永恒的一个话题和难点,就比如MySQL存取中文乱码,但我想做任何事情,都要有个思路才行,有了思路才知道如何去解决问题,否则,即使一时解决了问题,但过后不久又碰到同样的问题可能又会急得抓狂,MySQL中文乱码问题就是如此。

仅仅对MySQL中文乱码的解决而言,我认为主要的一个原则可以归结为五个字:“编码一致性”,只要遵循了这个原则,那么中文乱码就不难解决,那么何为“编码一致性”呢?子猴总结为有如下四个方面的编码必须保持一致,才能防止中文的乱码,下面将具体讲解。

首先我要设定的编码为UTF8,为何要设定UTF8编码呢?那是因为这是通用编码,像中国通常使用的GBK、GB2312、Big5等只是针对中文而言,但是对其他文字就不适用了,为了使得这个问题的解决具有文字编码通用性,所以我这里设定了UTF8这个编码。

编码一致性涉及到的四个方面为:应用程序编码、数据库系统编码、数据库编码、应用程序与数据库系统的连接编码。

1、  应用程序编码

指的是你在程序文件中的文字编码,以jsp文件为例来说明,就是你jsp的网页编码,比如:

<%@ page contentType="text/html; charset=UTF-8" %>

在这样的页面中,往往是调用数据库接口对数据库进行存取操作。

2、  与之对应的数据库系统编码

数据库系统就是你所用的MySQL(及其他数据库系统),数据库系统的编码要与应用程序编码一致,其编码设置根据操作系统的不同可以通过以下方式设置

2.1、Windosw环境下的MySQL编码设置

A、中止MySQL服务
B、在MySQL的安装目录下找到my.ini,如果没有就把my-medium.ini复制为一个my.ini即可
C、打开my.ini以后,在[client]和[mysqld]下面均加上default-character-set=utf8,保存并关闭
D、启动MySQL服务

(注:Windows环境下的设置我没有验证过)

2.2、Linux环境下的MySQL编码设置

首先我们登录到mysql,执行:show variables like ‘character%’;来查看数据库系统当前的编码方式,一般情况下,你会看到如下所示:

+————————–+—————————-+
| Variable_name | Value |
+————————–+—————————-+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+————————–+—————————-+

也就是默认编码都是latin1,很显然,我们要修改为UTF8。

通过:vi /etc/mysql/my.cnf修改my.cnf文件,这里需要注意的是,如果my.cnf文件不存在,则进入到mysql的安装目录,通过执行:cp share/mysql/my-large.cnf /etc/my.cnf生成my.cnf文件。

加入的内容如下:

在客户端配置[client]下面添加:

### 默认字符集为utf8
default-character-set=utf8

找到[mysqld]部分,在下面添加:

### 默认字符集为utf8
default-character-set=utf8
### (设定连接mysql数据库时使用utf8编码,以让mysql数据库为utf8运行)
init_connect=’SET NAMES utf8′

完毕后重启mysql服务,然后再通过执行show variables like ‘character%’;查看如下:

mysql> show variables like ‘character%’;

+————————–+—————————-+

| 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       | /usr/share/mysql/charsets/ |

+————————–+—————————-+

3、  数据库编码

改完数据库系统编码后,接下来轮到数据库编码了,请注意数据库系统与数据库的区别,数据库指的是你所创建的数据库Database及所包含的表,数据库编码设置很简单,在创建数据表的时候设置,举例如下:

create table Test

(

ID                   integer not null auto_increment,

NAME                 varchar(50) comment ‘测试字段’,

TYPE                 integer,

primary key (ID)

)

default charset utf8;

其中default charset utf8就表示此表的字符编码为utf8。

4、  应用程序与数据库系统的连接编码

连接编码相当于应用程序与数据库系统的沟通桥梁,同样也需要设置编码,我们以JDBC的连接语句来予以说明:

jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&amp;characterEncoding=UTF-8&amp;user=test&amp;password=111

上面的语句中为一个test的数据库,用户名为test,密码为111的数据库连接,其编码为characterEncoding=UTF-8。

通过以上四个方面的设置,那么mysql的中文乱码就轻松解决了!

如果你过段时间不记得mysql的中文乱码是如何解决的,那么你只要知道以上的解决思路,我想解决起来肯定会很快的。

转自http://www.zihou.me/html/2010/06/07/2245.html

如果这一切都设置无误,就要思考程序本身的问题了,如果页面传入数据库本身的就是乱码,那么就是程序的问题了,仔细核对,果然,问题出现在Servlet的处理上,添加以下语句问题成功解决。

req.setCharacterEncoding("utf-8");

mysql数据库 中文乱码的更多相关文章

  1. Mybatis插入MySQL数据库中文乱码

    Mybatis插入MySQL数据库中文乱码 在dataSource.properties配置文件中设置useUnicode=true&characterEncoding=utf-8编码即可. ...

  2. mysql数据库-中文乱码问题解决方案

    来自:http://www.2cto.com/database/201108/101151.html MySQL会出现中文乱码的原因不外乎下列几点: .server本身设定问题,例如还停留在latin ...

  3. 解决WampServer中MySQL数据库中文乱码的问题

    原文地址:http://blog.csdn.net/qq756703833/article/details/37971057 左键点击托盘区的WampServer图标,选择MySQL--my.ini, ...

  4. 关于JAVA插入Mysql数据库中文乱码问题解决方案

    方案一:在创建client的时候,指定使用的编码方式  具体如下: conn = DriverManager.getConnection("jdbc:mysql://localhost:33 ...

  5. mysql保存中文乱码的原因和解决办法

    当你遇到这个mysql保存中文乱码问题的时候,期待找到mysql保存中文乱码的原因和解决办法这样一篇能解决问题的文章是多么激动人心.    也许30%的程序员会选择自己百度,结果发现网友已经贴了很多类 ...

  6. ubuntu mysql emma中文乱码问题解决

    ubuntu mysql emma中文乱码问题解决 emma默认用apt-get 安装的话,emma是不支持中文的,配置文件或直接修改emma程序源文件(python). apt-get安装emma ...

  7. 分享一个解决MySQL写入中文乱码的方法

    分享一个解决MySQL写入中文乱码的方法 之前有发帖请教过如何解决MySQL写入中文乱码的问题.但没人会,或者是会的人不想回答.搜索网上的答案并尝试很多次无效,所以当时就因为这个乱码问题搁浅了一个软件 ...

  8. request.getParameter()及解决数据库中文乱码问题——实习第七天

    今天老师让我们自己做一个小项目,我开始着手于实现这个小项目.途中遇到过几个小问题,在此做个小记录, 相信后期还是会借鉴的. 1,从前台传入数据给后台传入数据,并没有传入成功: 输出的为Null. 当然 ...

  9. java.sql.Connection解决插入数据库中文乱码问题

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public clas ...

随机推荐

  1. Web 前端开发精华文章推荐(jQuery、HTML5、CSS3)【系列十二】

    2012年12月12日,[<Web 前端开发人员和设计师必读文章>系列十二]和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HT ...

  2. delphi 取硬盘号

    function GetVolumeID: string; var vVolumeNameBuffer: ..] of Char; vVolumeSerialNumber: DWORD; vMaxim ...

  3. Mybatis传入参数类型为Map

    mybatis更新sql语句: <update id="publishT00_notice" parameterType="Map"> update ...

  4. PHP常用数据库代码汇总

    连接MYSQL //MYSQL数据库配置 define(DB_HOST, '127.0.0.1'); define(DB_USER, 'user'); define(DB_PASS, 'pass'); ...

  5. Eclipse创建maven项目

    许久不创建maven web项目了,今天上手很是陌生,搜集资料后终于创建成功,跟大家也分享一下,同时也便于以后再次忘记使用... 新建maven项目(右击new,若不存在,可在other里面寻找)

  6. 面试问题整理笔记系列 一 Java容器类

                                               虚线框表示接口:实线框表示实体类:粗线框表示最常用的实体类:虚线箭头表示实现了这个接口:实现箭头表示类可以制造箭头 ...

  7. UITableView的scrollToRowAtIndexPath:atScrollPosition:animated的崩溃

      UITableView的scrollToRowAtIndexPath:atScrollPosition:animated的崩溃 [摘要:reason: '-[UITableView _conten ...

  8. 多级下拉菜单zz

    MultiLevelMultiSelectCombo (Silverlight) Tharindu Nishad Patikirikorala, 14 Aug 2013 CPOL 5.00 (1 vo ...

  9. 点击label时click事件被触发两次的坑

    今天帮群里的朋友看一段代码的时候偶然间遇到一个label的坑,点击label的时候,监听的click事件被执行两次: 具体代码如下: <div id="test"> & ...

  10. iOS-OC根据时间戳获取距离现在的状态(刚刚,分钟前,今天,昨天)

     iOS-OC根据时间戳获取距离现在的状态(刚刚,分钟前,今天,昨天) 获取时间戳 - (NSString *)distanceTimeWithBeforeTime:(double)beTime { ...