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

中文乱码似乎是程序编写中永恒的一个话题和难点,就比如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. Django 连接mysql数据库中文乱码

    Django 连接mysql数据库中文乱码 2018年08月25日 20:55:15 可乐乐乐乐乐 阅读数:566   版本:CentOS6.8 python3.6.4 django1.8.2 数据库 ...

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

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

  4. MySQL数据库中文乱码问题

    mysql> select * from books; +-----+---------------------------------+---------+-------------+---- ...

  5. java 保存到mysql数据库中文乱码

    <property name="jdbcUrl">jdbc:mysql://localhost:3306/company?useUnicode=true&cha ...

  6. 关于hibernate插入数据到mysql数据库中文乱码问题的解决

    要想解决这个问题就要找到问题的症结所在 1.首先将数据提交到action输出看action里的数据是不是中文乱码,结果很遗憾并不是这里的问题 2.设置数据库连接url: 3.打开mysql安装文件里的 ...

  7. DOS命令行操作MySQL数据库中文乱码问题解决

    我们在 dos 命令行操作中文时,会报错 ’); ERROR (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for column 原因:因为 ...

  8. 解决navicate 连接mysql数据库中文乱码的问题

    以下均是ubuntu12.04为准 1.修改mysql的配置文件. 1.1.vi  /etc/mysql/my.conf找到[client]在其下面添加 default-character-set=u ...

  9. web项目数据存入mysql数据库中文乱码问题

    刚开始怀疑是项目中编码设置问题,发现在web.xml中已经有过设置:后来dubug显示数据在传输的过程中一切正常,怀疑是数据库编码问题,然后查看mysql编码: show variables like ...

随机推荐

  1. Linux File Recovery Study

    Background Today I did stupid things that I went into the ~/Downloads/ and pressed [Alt] + [A] then ...

  2. Java程序设计之正则表达式

    正则表达式平时在用到字符串处理的时候是比较常用的,个人觉得不需要刻意的去理解,用的话把文档拿出来查一下就好了,下面给个链接 http://www.php100.com/manual/Javascrip ...

  3. 关于laravel基础知识

    laravel任务管理知识点 1.配置数据库环境 首先要找到congif/app.php,在这里会发现一些全局的系统设置,包括语言,时区等. 重要的是会发现前几个数组都使用了env()这个函数,这个时 ...

  4. 鼠标/手指相对于元素的坐标(px转百分比)

    鼠标/手指相对于元素的坐标:鼠标或手指当前的位置 - 元素距离文档的位置 px转百分比:px / 文档尺寸 * 100 获取手指触摸在屏幕中相对于元素的坐标(px转百分比): $('#div').on ...

  5. apache服务器启动时提示httpd: apr_sockaddr_info_get() failed for

    apache服务器启动时提示httpd: apr_sockaddr_info_get() failed for 在RedHat Linux 5 与 CentOS 5服务器上配置好apache后,启动或 ...

  6. Linux服务器高并发实践经历

    作为一个师父离职早的野生程序员,业务方面还可以达到忽悠别人的水平,但上升到性能层面那就是硬伤. 真实天上掉馅饼,公司分配了一个测试性能的任务,真是感觉我的天空星星都亮了. 高并发主要限制因素:CPU. ...

  7. Android利用Jsoup解析html 开发网站客户端小记。

    这些天业余时间比较多,闲来无事,想起了以前看过开发任意网站客户端的一篇文章,就是利用jsoup解析网站网页,通过标签获取想要的内容.好了废话不多说,用到的工具为 jsoup-1.7.2.jar包,具体 ...

  8. ZigZag Conversion leetcode java

    题目: The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows l ...

  9. unity导出工程导入到iOS原生工程中详细步骤

    一直想抽空整理一下unity原生工程导入iOS原生工程中的详细步骤.做iOS+vuforia+unity开发这么长时间了.从最初的小小白到现在的小白.中间趟过了好多的坑.也有一些的小小收货.做一个喜欢 ...

  10. C#软件设计——小话设计模式原则之:接口隔离原则ISP

    前言:有朋友问我,设计模式原则这些东西在园子里都讨论烂了,一搜一大把的资料,还花这么大力气去整这个干嘛.博主不得不承认,园子里确实很多这方面的文章,并且不乏出色的博文.博主的想法是,既然要完善知识体系 ...