中文乱码似乎是程序编写中永恒的一个话题和难点,就比如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&characterEncoding=UTF-8&user=test&password=111
上面的语句中为一个test的数据库,用户名为test,密码为111的数据库连接,其编码为characterEncoding=UTF-8。
通过以上四个方面的设置,那么mysql的中文乱码就轻松解决了!
如果你过段时间不记得mysql的中文乱码是如何解决的,那么你只要知道以上的解决思路,我想解决起来肯定会很快的。
分享到:
相关推荐
MySQL写入中文乱码之处理character
解决PHP+mysql处理中文乱码的独家方案
mysql数据库内容处理关于中文乱码的问题
C++操作MariaDB和MySql中文乱码或无法处理中文的解决办法
MySQL是一个精巧的SQL数据库管理系统,虽然它不是开放源代码的产品,但在某些情况下你可以自由使用。由于它的强大功能、灵活性、丰富的应用编程接口(API)以及精巧的系统结构,受到了广大自由软件爱好者甚至是商业...
这是我积累的关于mysql的数据乱码的一写经验,有兴趣的可以看看
MySQL写入中文乱码之处理character
mysql中文乱码处理.docx
Jsp输出中文的乱码问题,获取表单提交的数据时的中文乱码问题,url中的中文问题,数据库中采取的编码方式不同于utf-8怎么办
mysql 优化以及 中文乱码处理问题。不错的东东。
MYSQL使用UTF8中文乱码处理方法.docx
JDBC连接mysql处理中文时乱码解决办法详解 近日,整合的项目需要跟一个比较老版本的mysql服务器连接,使用navicat查看,发现此mysql服务器貌似没有设置默认编码,而且从操作此mysql的部分php文件看,应该是使用的gb...
中文乱码问题 当我第一次接触mysql,首先让我难受的是mysql的乱码问题,百度上也有许多有关的解决方案,不过作为亲身受害者,我想很有必要贴出我的心声: 1.关于mysql的字符集处理 mysql在标识数据时采取二进制字符...
mysql乱码处理,MySQL会出现中文乱码的原因不外乎下列几点: 1.server本身设定问题,例如还停留在latin1 2.table的语系设定问题(包含character与collation) 3.客户端程式(例如php)的连线语系设定问题 强烈建议使用...
MYSQL使用UTF8中文乱码终极处理方法.docx
本文主要是解决python2.7在查询mysql时产生中文乱码的处理方法,非常的有用,亲测可行,推荐给大家
Ofbiz 与MYSQL配置的中文问题及 ecommerce相关设置 Lookup字段的乱码处理 Get方法中文乱码解决办法 日期的表示乱码处理
这一次要说一下的是在C语言和nodejs与MySQL进行交互的时候出现的乱码问题。 1,由于爬虫程序在多个Docker中执行,因此我需要定期的同步每一个docker中的mysql数据到一个全局的mysql数据表中。使用nodejs进行数据...