mysql 中文乱码
[mysql]
# 设置mysql客户端默认字符集
#default-character-set=utf8
default-character-set=gbk
[mysqld]
#设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=D:\install\MySQL\mysql-5.6.27-winx64
# 设置mysql数据库的数据的存放目录
datadir=D:\install\MySQL\mysql-5.6.27-winx64\data
# 允许最大连接数
max_connections=200
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
[client]
port = 3306
default_character_set=utf8
以下有几点概念想解释一下
最近发现,在MySQL的dos客户端输出窗口中查询表中的数据时,表中的中文数据都显示成乱码,如下图所示:
上网查了一下原因:之所以会显示乱码,就是因为MySQL客户端输出窗口显示中文时使用的字符编码不对造成的,可以使用如下的命令查看输出窗口使用的字符编码
show variables like 'char%';
命令执行完成之后显示结果如下所示:
可以看到,现在是使用utf8字符编码来显示中文数据的,但是因为操作系统是中文操作系统,默认使用的字符集是GB2312,所以需要把输出窗口使用的字符编码改成gb2312才能够正常显示中文。使用如下的命令设置输出窗口使用的字符编码:
set character_set_results=gb2312;
命令执行完成之后就可以把输出窗口使用的字符编码改成gb2312,如下图所示:
此时我们再次执行查询,表中的中文数据就可以正常显示了,如下图所示:
首先,MySQL的字符集问题主要是两个概念,一个是Character Sets,一个是Collations,前者是字符内容
及编码,后者是对前者进行比较操作的一些规则。这两个参数集可以在数据库实例、单个数据库、表、列等四个级
别指定。
对于使用者来说,一般推荐使用utf8编码来存储数据。而要解决乱码问题,不单单是MySQL数据的存储问题,还
和用户的程序文件的编码方式、用户程序和MySQL数据库的连接方式都有关系。
首先,MySQL有默认的字符集,这个是安装的时候确定的,在编译MySQL的时候可以通过DEFAULT_CHARSET=
utf8和DEFAULT_COLLATION=utf8_general_ci这两个参数(MySQL5.5版本,5.1版本用--with-charset=
utf8 --with-collation=utf8_general_ci)来指定默认的字符集为utf8,这也是最一劳永逸的办法,这样指定后,
客户端连接到数据库的编码方式也默认是utf8了,应用程序不需要任何处理。
但是遗憾的是,很多人编译安装MySQL的时候没有指定这两个参数,大多数人更是通过二进制程序的方式安装,那
么这时候MySQL的默认字符集是latin1。而这时候我们仍然可以指定MySQL的默认字符集,通过my.cnf文件增加
两个参数:
1.在[mysqld]下添加
default-character-set=utf8(mysql 5.5 版本添加character-set-server=utf8)
2.在[client]下添加
default-character-set=utf8
这样我们建数据库建表的时候就不用特别指定utf8的字符集了。配置文件里的这种写法解决了数据存储和比较的问题
,但是对客户端的连接是没有作用的,客户端这时候一般需要指定utf8方式连接才能避免乱码。也就是传说总的set
names命令。事实上,set names utf8命令对应的是服务器端以下几个命令:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;
但这三个参数是不能写在配置文件my.cnf里的。只能通过set命令来动态修改。我们需要的是在配置文件里写好一劳
永逸的办法。那么这时候,是否有在服务端解决问题的办法呢,可行的思路是在init_connect里设置。这个命令在每
个普通用户连接上来的时候都会触发执行,可以在[mysqld]部分增加以下一行设置连接字符集:
在[mysqld]下添加:
init_connect = 'SET NAMES utf8'
总结:
1、首选在编译安装MySQL的时候指定两个参数使用utf8编码。
2、次选在配置文件my.cnf或my.ini设定两个参数,同时设置init_connect参数。
3、第三在配置文件my.cnf或my.ini设定两个参数,同时客户端的连接指定set names命令。
4、在配置文件my.cnf里的client和server处加入default-character-set参数方便管理。
MySQL 5.5版本解决中文乱码问题时my.ini内[mysqld]项中不能再写default-character-set=utf8
来看看如何解决乱码问题:
在mysql中默认字符集是latin1,
想要设置字符集为uft-8,可以在 my.cnf 文件中添加以下设置:
·[client]
1 |
default-character- set =utf8 |
·[mysqld]
1 |
default-character- set =utf8 |
2 |
skip-character- set -client-handshake #此处是忽略客户端的字符集,使用服务器的设置 |
(skip语句和client中的default选一个)
当然你可以在建立数据库是规定字符集:
1 |
create database db_name default character set utf8 callate utf8-general-ci; |
也可以在链接数据库前设置:
1 |
set names 'utf8' ; |
重点在红字上,加了skip-character-set-client-handshake,client里面就不用加default了
01 |
show variables like 'characte%' ; |
02 |
+ --------------------------+----------------------------+ |
03 |
| Variable_name | Value | |
04 |
+ --------------------------+----------------------------+ |
05 |
| character_set_client | utf8 | |
06 |
| character_set_connection | utf8 | |
07 |
| character_set_database | utf8 | |
08 |
| character_set_filesystem | binary | |
09 |
| character_set_results | utf8 | |
10 |
| character_set_server | utf8 | |
11 |
| character_set_system | utf8 | |
12 |
| character_sets_dir | /usr/share/mysql/charsets/ | |
13 |
+ --------------------------+----------------------------+ |
但是根据以上的配置过了后,mysql就无法启动了,这是为什么呢?往下看:
在5.1版本时,为了解决中文乱码问题设置默认字符集为utf8时,在my.ini内的 [mysql] 和 [mysqld] 项中都是写:
1 |
default-character- set =utf8 |
到了5.5版本, [mysql] 项内可以这么写, [mysqld] 项内这么写在启动MySQL服务时会有1067错误,经查询发现这里必须要这样写:
1 |
character- set -server=utf8 |
目前已知5.1和5.5有这么一个不同之处,且是从5.5的安装版本自动生成的my.ini文件中看出的。配置免安装的5.5版本还需要进一步的实验。
mysql 中文乱码的更多相关文章
- 解决springmvc+mybatis+mysql中文乱码问题【转】
这篇文章主要介绍了解决java中springmvc+mybatis+mysql中文乱码问题的相关资料,需要的朋友可以参考下 近日使用ajax请求springmvc后台查询mysql数据库,页面显示中文 ...
- 总结--解决 mysql 中文乱码
首先分析一下导致mysql 中文乱码的原因: 1.建表时使用了latin 编码 2.连接数据库的编码没有指定 3.写入时就已经乱码(这种情况需要自己检查源数据了) 解决方法总结: 1.创建库时指定编码 ...
- Servlet、MySQL中文乱码
1.Servlet中文乱码: 在doPost或doGet方法里,加上以下两行即可: response.setContentType("text/html;charset=UTF-8" ...
- php mysql 中文乱码解决方法
本文章向码农们介绍php mysql 中文乱码解决方法,对码农们非常实用,需要的码农可以参考一下. 从MySQL 4.1开始引入多语言的支持,但是用PHP插入的中文会出现乱码.无论用什么编码也不行 解 ...
- windows mysql 中文乱码和中文录入提示太大错误的解决方法
今天操作mysql的时候很郁闷,因为修改默认字符集搞了半天,终于弄成了(关于如何把windows的默认字符集设置成功,可以参看另一篇博文,最终在mysql中输入show variables like ...
- MySQL编程(0) - Mysql中文乱码问题解决方案
MySQL 5.6 for Windows 解压缩版配置安装: http://jingyan.baidu.com/article/f3ad7d0ffc061a09c3345bf0.html MySQL ...
- MySQL及navicat for mysql中文乱码
转载自:https://www.cnblogs.com/mufire/p/6697994.html 修改完之后记着重启mysql服务,在服务里边重启,即可生效! 全部使用utf8编码 MySQL中文乱 ...
- 通过msyql proxy链接mysql中文乱码及session问题
1.session问题 问题前提:一台机数据库为两个实例,通过不同的socket监听不同端口对外提供服务.不同的站点都访问同一个VIP不同的端口进行访问数据库. 故障现象:一旦有一个站点先用了这个vi ...
- 可遇不可求的Question之导入mysql中文乱码解决方法篇
可遇不可求的Question之导入mysql中文乱码解决方法篇 先 set names utf8;然后 source c:\1.sql ?
- PHP彻底解决mysql中文乱码
彻底解决mysql中文乱码 mysql是我们项目中非经常常使用的数据型数据库. 可是由于我们须要在数据库保存中文字符,所以经常遇到数据库乱码情况.以下就来介绍一下怎样彻底解决数据库中文乱码情况. 数据 ...
随机推荐
- 自己动手写把”锁”---LockSupport介绍
本篇是<自己动手写把"锁">系列技术铺垫的最后一个知识点.本篇主要讲解LockSupport工具类,它用来实现线程的挂起和唤醒. LockSupport是Java6引入 ...
- webpack之loader实践
初识前端模板概念的开发者,通常都使用过underscore的template方法,非常简单好用,支持赋值,条件判断,循环等,基本可以满足我们的需求. 在使用Webpack搭建开发环境的时候,如果要使用 ...
- python爬虫——写出最简单的网页爬虫
在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材.我们可以通过python 来实现这样一个简单的爬虫功能,把我们想要的 ...
- Js相关用法个人总结
Js相关用法个人总结 js中将数组元素添加到对象中var obj = {}; var pushArr = [11,22,33,44,55,66]; for(var i=0;i<pushArr. ...
- php require、require_once和include、include_once的区别
一.引入php文件路径的方法require '文件路径'; require ('文件路径');require_once '文件路径'; require_once ('文件路径');include 同 ...
- Mac安装Scala
1. 下载,解压Scala sdk,2. 配置环境变量(.bash_profile) SCALA_HOME="/Users/soft/scala_soft/scala-2.11.6" ...
- 轻松逃脱某防火墙对ss的探测
ss里面有些诡异的日志(我用的是ss-go) 2017/10/1* 1*:5*:19 error getting request ***:*** ***:*** EOF 这种日志不多,一般新开一个 ...
- ABP Zero 本地化语言的初始化和扩展
在aspnetboilerplate.com生成后,在core下的本地化文件增加选项即可 初始化方法 解析: var currentCultureName = Thread.CurrentThread ...
- PIL遇到问题解决
PIL 全称:Pillow 在使用PIL4.2.1版本读取jpeg文件时,报cannot identify image file,去github源查找原因:https://github.com/pyt ...
- 【WC2013】糖果公园
Candyland 有一座糖果公园,公园里不仅有美丽的风景.好玩的游乐项目,还有许多免费糖果的发放点,这引来了许多贪吃的小朋友来糖果公园玩. 糖果公园的结构十分奇特,它由 nn 个游览点构成,每个游览 ...