mysql不能改编码_(转)MySQL设置和修改编码问题

mysql版本:5.7.18

一、常用查看字符集设定命令

1、查看数据库支持的所有字符集。

show character set;

(或 show char set;)

2、查看当前状态命令(显示结果会包含数据库的字符集设置)

status(或 /s)

其中Db characterset对应的是数据库目录下的db.opt文件内容。(查到mysql安装目录下有4个db.opt文件,与显示相同的在mysql/data/mysql路径下)。

3、查看系统字符集设置(包括所有的字符集设置)

show variables like '%char%';

其中的含义如下:

条目说明

character_set_client

为客户端使用的字符集。

character_set_connection

为连接数据库的字符集设置类型,如果程序没有指明连接数据库使用的字符集类型则按照服务器端默认的字符集设置。

character_set_database

为数据库服务器中某个库使用的字符集设定,如果建库时没有指明,将使用服务器安装时指定的字符集设置。

character_set_results

为数据库给客户端返回时使用的字符集设定,如果没有指明,使用服务器默认的字符集。

character_set_server

为服务器安装时指定的默认字符集设定。

character_set_system

为数据库系统使用的字符集设定。

当客户端连接服务器的时候,它会将自己想要的字符集名称发送给mysql服务器,然后服务器就会使用这个字符集去设置 character_set_connection、character_set_client、character_set_results这三个值。

在cmd客户端使用GBK字符集,上图client、connection、results的值为GBK。

在Navicat for Mysql中运行命令,显示值为utf-8。

4、查看具体的数据库表的字符集设置

show full columns from tablename;

(或show create table tablename\G;

注:\G在cmd中可以去除打印的表格边框,在Navicat for Mysql中命令有\G会报错。)

5、查看数据库编码

show create database dbname;

二、创建时指定字符集

知道了怎么查找字符集的相关信息之后,我们就要懂得怎么在创建指定对象的时候,为该对象匹配相应的字符集。

1、服务器级

在安装MySQL时,可以设置服务器的默认编码格式,也可对 my.ini做修改,修改[mysqld]里面的character_set_server=utf8,则可设置character_set_server的值。

2、数据库级

CREATE DATABASE db_name DEFAULT CHARACTER SET utf8;

注:如果不指定默认的字符集,则系统会根据character_set_database的值进行设置。

3、表级

CREATE TABLE `db_name`.`tb_name` (id VARCHAR(20) NOT NULL,name VARCHAR(20) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

在创建表时指定了默认字符集为utf8,即使character_set_database为gbk,表的列都为utf-8。

但要注意,如果没有定义表的默认字符集,则会按照character_set_database的值来设置。(试了一下应该是按照表所属的数据库字符集来设置吧)。

4、列级

CREATE TABLE `db_name`.`tb_name` ( id varchar(20) NOT NULL, name varchar(20) CHARACTER SET utf8 );

三、修改字符集命令

MySQL的字符集问题主要是两个概念,一个是Character Sets,一个是Collations,前者是字符内容

及编码,后者是对前者进行比较操作的一些规则。这两个参数集可以在数据库实例、单个数据库、表、列等四个级

别指定。

1、修改character_set_connection、character_set_client、character_set_results三值

SET NAMES charset_name [COLLATE 'collation_name']

(例:SET NAMES utf8;)

该命令相当于

SET character_set_client = charset_name; SET character_set_results = charset_name; SET character_set_connection = charset_name;

另外,还可以修改配置文件my.ini,对[mysql]下增加 default-character-set=utf8,配置成你想要的字符集(个人尝试在my.ini里面配置过,没有成效,不知道是不是被使用的客户端想要的字符集给覆盖掉了呢?)

2、修改character_set_database字段

ALTER DATABASE db_name [[DEFAULT] CHARACTER SET charset_name] [[DEFAULT] COLLATE collation_name]

(例:alter database test_database character set latin2;)

3、修改character_set_server字段

最简单的方法是直接改my.ini配置文件里面[mysqld]的字段,增加character-set-server=gbk,然后重启mysqld,则可改为你想要的字符集。

4、修改表的字符集

ALTER TABLE tbl_name [[DEFAULT] CHARACTER SET charset_name] [COLLATE collation_name]

(例:ALTER table hahaha CHARACTER set gbk)

5、修改列的字符集

col_name {CHAR | VARCHAR | TEXT} (col_length) [CHARACTER SET charset_name] [COLLATE collation_name]

(例:ALTER TABLE t1 MODIFY col1 VARCHAR(5) CHARACTER SET latin1 COLLATE latin1_swedish_ci;)

四、附 Linux下MySQL字符集设置

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文件增加两个参数:

在[mysqld]下添加default-character-set=utf8(mysql 5.5 版本添加character-set-server=utf8);

在[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参数方便管理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/346188.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 编程语言排行榜_2019年6月编程语言排行榜:Python 排名飙升,三年内有望超越Java...

TIOBE 6 月编程语言排行榜 更新已发布,排名前三的依然是:Java, C, Python。本月Python的TIOBE指数再次创下8.5%的历史新高。如果Python能够保持这样的速度,那它完全有可能在3到4年内取代C和Java,从而成为世界上***的编程语言。Pyt…

使用IntelliJ调试Java流

流功能非常强大,只需几行就可以捕获您预期功能的要点。 但是,就像它们在一切正常工作时一样平滑,就像它们在表现不正常时一样令人痛苦。 了解如何使用IntelliJ调试Java Streams并深入了解Stream的中间操作。 在本文中,我将在示例…

四川对口高职本科学校计算机,2018四川对口高职本科学校有哪些

相信很多想要报考四川单招对口高职的同学,都是非常的关心四川对口高职本科学校有哪些的,小编整理了相关信息,希望会对大家有所帮助!四川文化艺术学院(Sichuan University of Culture and Arts),简称“川文艺”,是经教育…

echart 饼图每一块间隙_花10分钟做酱香饼,简单方便又美味,酥脆咸香比买的还要好吃...

花10分钟做酱香饼,简单方便又美味,酥脆咸香比买的还要好吃前几年,在单位附近有一家只做酱香饼的小店,刚开张的时候排很长队,我为了一块酱香饼排队半小时。后来买酱香饼的人少了,我三天两头买一块酱香饼解馋…

html 边框轮廓,CSS半圈(边框,仅轮廓)

小编典典您可以使用border-top-left-radius和border-top-right- radius属性根据框的高度(和添加的边框)在框上四角。然后在框的顶部/右侧/左侧添加边框以达到效果。干得好:.half-circle {width: 200px;height: 100px; /* as the half of the width */background-col…

人类一败涂地做图教程_《人类一败涂地》形象绘画技巧图文指南

第2页:展开第四步进行对人物细节描边处理,使粗细不同的变得一致,还是拉近镜头,利用底色扣细致。最重要的一点来了!不管你画成什么样子,如果你在护理细节的过程中镜头过于拉进并且没有某一部位时模型会变成黑…

Spring Data Pivotal Gemfire教程

1. Spring Data Pivotal Gemfire –简介 在这篇文章中,我们将介绍有关Spring Data Pivotal Gemfire的全面教程。 Pivotal Gemfire是由Apache Geode支持的内存中数据网格解决方案。 使用Pivotal Gemfire构建的应用程序使您可以在分布式服务器节点之间轻松扩展系统。 …

计算机诞生发展分类特点及应用,计算机的诞生与发展,及其特点

计算机基本常识一、计算机的概念:计算机是一种能迅速而高效的自动完成信息处理的电子设备,它能按照程序对信息进行加工、处理、存储。二、计算机的诞生与发展1、诞生:1946年,美国为计算弹道轨迹而研制成功了世界第一台计算机。2、…

404 单页应用 报错 路由_通过 Laravel 创建一个 Vue 单页面应用(五)

文章转发自专业的Laravel开发者社区,原始链接:https://learnku.com/laravel/t/34858我们在第4部分完成了编辑用户的功能,并且学习了如何使用 v-model 来监听视图组件中用户信息的更改。现在我们可以开始构思删除用户功能,以及删除…

使用计算机求解雷达方程,关于雷达方程

满意答案zjit99402014.01.27采纳率:41% 等级:12已帮助:2803人带宽校正系数是Co而不是Do.我们知道雷达接收到回波信号后,必须进行信号处理,使中频接收机的输出端(检波器的输入端)输出的信号和噪声功率比(简称信噪比)…

hook 与aspectj_将AspectJ与NetBeans平台开发集成

hook 与aspectj您是否正在使用NetBeans平台开发项目? 您愿意使用AspectJ来使用AOP吗? 您不知道如何将AspectJ编译器集成到NetBeans的内部版本中? 如果您的回答是“是”,则此帖子适合您。 我决定写这篇技术文章,是因为…

考试用计算机反思800字,考试反思作文800字

【考试】作者: 武佳硕2017年 5月6日 星期六 晴今天我们进行了一场在英华初中免费生考试前测试。虽然这次考试,不会算我们的真实成绩,但是老师要测我们的考试状态,一开始我还自信满满地认为我能考好,没想到我居然靠得一…

静茹docker容器的几种方法_1-容器和docker基础知识

[TOC]## 一 容器的概念### 1.什么是容器:容器是在隔离的环境里面运行的一个进程,这个隔离的环境有自己的系统目录文件,有自己的ip地址,主机名等。也可以说:容器是一种轻量级虚拟化的技术。### 2.容器相对于kvm虚拟机的…

JSON-B非对称属性绑定

JSON-B规范定义了诸如JsonbProperty或JsonbTransient类的绑定批注,以声明方式将Java对象映射到JSON,然后再映射回JSON。 这些注释可以“非对称地”用于定义序列化和反序列化的不同处理。 如果在Java属性上或在getter和setter上标注JSON Binding批注&…

怎么利用计算机计算潮流计算,电力系统潮流计算的目的是什么

电力系统潮流计算的目的是什么潮流计算是研究电力系统稳态运行情况的一种基本电气计算,常规潮流计算的任务是根据给定的运行条件和网路结构确定整个系统的运行状态,如各母线上的电压(幅值及相角)、网络中的功率分布以及功率损耗等。潮流计算的结果是电力…

7500 cpuz跑分 i5_小米Pro笔记本亮相跑分网站:处理器包含AMD Zen3、11代酷睿

2020年已经接近尾声,随之而来的将会是一大波新品发布会,不仅是手机,笔记本电脑、显卡等产品也会有新品亮相。一年一度的CES 2021也即将开幕,届时英特尔、英伟达、AMD等知名厂商也都将出席活动。据悉,英特尔将推出11代酷…

2016年计算机网考,2016年电大:计算机网考(全)练习题.doc

2016年电大:计算机网考(全)练习题用来给电子工作表中的行号进行编号的是______。数字在Excel中,输入数字作为文本使用时,需要输入作为先导标记的字符是______。单引号电子工作表中每个单元格的默认格式为______。常规不包含在Excel的格式工具…

2能不用cuda_洗洁精不用花钱买,自己在家就能做,成本2毛钱,比买的更好用

点击上面“妙招姐”免费关注图文版:哈喽大家好,我是妙招姐,洗洁精是我们生活中的必须品,但用洗洁精来清洗餐具或水果等和食物相关的东西多多少少都会有残留,那么今天妙招姐就来教大家用橘子皮来自己制作洗洁精&#xf…

Apache Ignite,Hazelcast,Cassandra和Tarantool之间的主要区别

Apache Ignite在世界范围内得到广泛使用,并且一直在增长。 诸如Barclays,Misys,Sberbank(欧洲第三大银行),ING,JacTravel之类的公司都使用Ignite来增强其体系结构的各个部分,这些部分…

n.html id=198,YPE htmlhtml lang=enhead data-n-head-ssrtitle data-n-=true小程序获取不到unionid 微信开放社区...

我们的小程序和公众号绑定在同一开放平台,隶属于同一主体,新用户在经过公众号授权登陆后,在小程序的登陆接口获取的信息只有session_key和open_id,没有unionId,请问这是什么问题我们已经在用户登陆小程序之前进行了同一…