sql server修改字段编码格式_关于MySQL如何修改character_set_client的编码问题

问题引入:

    我们经常会遇到一些向MySQL数据库中插入中文,但是select出来的时候,却发现是乱码的情况。如我们向表a出入这样一段记录:i

insert into a values(‘你好helloworld你好’,’helloworld’);
可能当你访问它的时候,会发现他的结果变成如下图所示:

FFzuMb.png image

那怎么样才能解决这种问题呢?通过下文对MySQL中字符集的一些操作,你将会得到答案!

**查看库、表字符集命令: **

    要解决字符集的问题,首先要知道现在的系统、数据库、表、客户端等使用什么样的字符集,以及系统支持什么字符集等,下面介绍一些获取相关信息的语句:

1.查看数据库支持的所有字符集
show character set;或者show char set;

ZNBnAz.png Image(42)

2.查看当前状态,里面当然包括字符集的设置:

status或者/s

rAJzYj.png Image(43)

其中Db characterset对应的是数据库目录下的文件内容:

iiumua.png Image(44)

3.查看系统字符集设置,包括所有的字符集设置:

show variables like ‘%char%’;

得出如何所示结果:

aeQZVj.png Image(40)

其中的含义如下:

bIf2Mz.png Image(41)

关于connection相关的字符集的官方文档:

What character set is the statement in when it leaves the client?

The server takes the character_set_client system variable to be the character set in which statements are sent by the client.

What character set should the server translate a statement to after receiving it?

For this, the server uses the character_set_connection and collation_connection system variables. It converts statements sent by the client from character_set_client to character_set_connection (except for string literals that have an introducer such as _latin1 or _utf8). collation_connection is important for comparisons of literal strings. For comparisons of strings with column values, collation_connection does not matter because columns have their own collation, which has a higher collation precedence.

What character set should the server translate to before shipping result sets or error messages back to the client?

The character_set_results system variable indicates the character set in which the server returns query results to the client. This includes result data such as column values, and result metadata such as column names and error messages.
从上文中可以看出character_set_connection、character_set_client、character_set_results三个字符集什么时候用到。从实际上可以看到,当客户端连接服务器的时候,它会将自己想要的字符集名称发给mysql服务器,然后服务器就会使用这个字符集去设置character_set_connection、character_set_client、character_set_results这三个值。如cmd是用gbk,而mysql workbench是用utf8.
CMD:

VrINfi.png image

MySql WorkBench:

MrIrQz.png image

4.查看数据表中字符集设置:
show full columns from tablename;

Bb6BBf.png Image(45)

show create table tablename/G;

QvInUb.png Image(46)

5.查看数据库编码:
show create database dbname;

6vyUby.png Image(47)

创建时指定字符集:

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

1.服务器级:
在安装MySQL时可以设置服务器的默认编码格式,也可对做修改,修改[mysqld]里面的character_set_server=utf8,则可设置character_set_server的值。2.数据库级:
CREATE DATABASE db_name DEFAULT CHARACTER SET utf8;

r2uAna.png Image(48)

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

naAvIn.png Image(49)

3.表级:

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

从下图可看出,定义表的默认字符集为utf8,即使character_set_database为gbk,但是表的列都未utf8

2UNfUj.png Image(50)

但要注意,如果没有定义表的默认字符集,则他会按照character_set_database的值来设置,如图所示:

AvUJVf.png Image(51)

4.列级:

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

从下图可以看到,整个表的默认字符集为gbk,所以没有指定字符集的列都用默认的字符集,而指定了字符集的列name,则使用指定的字符集utf8。

7BZ7Vr.png Image(52)

修改字符集命令

    如果已经是创建好的对象,那又应该如何处理呢。我们就应该对指定对象就行修改字符集的操作。

1.修改character_set_connection、character_set_client、character_set_results三值:
对于某一个连接来说,可以使用:
SET NAMES ‘charset_name’ [COLLATE ‘collation_name’]

6rAFFn.png image

命令

SET NAMES ‘charset_name’ [COLLATE ‘collation_name’]

相当于

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

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

2.修改character_set_database字段:

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

zaiyuq.png image

3.修改character_set_server字段:

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

4.修改表的字符集:

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

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;

转自:

参考资料:

MySQL的Character Set Support: http://dev.mysql.com/doc/refman/5.6/en/charset.html
mysql常用查看库,表字符集命令: http://bjlfp.blog.163.com/blog/static/773684612012298455765/
MySQL 插入数据时,中文乱码问题的解决:

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

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

相关文章

通用apdu指令_8086微处理器中的通用指令格式

通用apdu指令Introduction: 介绍: In this article, we are going to discuss about the 6 general formats of instructions. 在本文中,我们将讨论6种通用指令格式。 One byte instruction: 一字节指令 : This is only one byte long an…

Linux中断不能进行任务调度,关中断是否禁止任务调度?关中断能作为互斥吗?...

今天再看《嵌入式软件系统教程》((美)西蒙 著,陈向群 等译) ,里面讲到关中断会关了任务调度,作者没说原因,我也不知道为什么,所以查了查网络。在这个网址http://www.hqwic.com/bbs/topic.aspx?topicid11253上有一个讨…

Win10系统怎样让打开图片方式为照片查看器

打开注册表编辑器之后,我们双击左侧的目录,依次打开HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft目录,如下图所示。 在Microsoft目录下,我们需要找到Windows Photo Viewer\Capabilities\FileAssociations目录项,直到看到该子…

python爬虫开发 从入门到实战 pdf 谢乾坤_python字符串和整数相互转换的实例分享...

python 字符串和整数的转换方法数字转成字符串方法一:使用格式化字符串:tt322tem%d %tttem即为tt转换成的字符串常用的格式化字符串:%d 整数%f%F 浮点数%e%E 科学计数%g%G e 和%f/%E 和%F 的简写%% 输出%格式化操作符辅助指令符号 作用* 定义宽度或者小数…

c语言插入排序算法_插入排序算法,流程图和C,C ++代码

c语言插入排序算法In the last article, we discussed about the bubble sort with algorithm, flowchart and code. In this article, we are going to discuss about another basic sorting technique i.e. insertion sort. 在上一篇文章中,我们讨论了用算法&…

EF使用CodeFirst方式生成数据库技巧经验

前言 EF已经发布很久了,也有越来越多的人在使用EF。如果你已经能够非常熟练的使用EF的功能,那么就不需要看了。本文意在将自己使用EF的方式记录下来备忘,也是为了给刚刚入门的同学一些指导。看完此文,你应该就学会以CodeFirst的方…

java jar包示例_Java包getImplementationVersion()方法和示例

java jar包示例包类的getImplementationVersion()方法 (Package Class getImplementationVersion() method) getImplementationVersion() method is available in java.lang package. getImplementationVersion()方法在java.lang包中可用。 getImplementationVersion() method …

c语言中字母的定义,c语言字符串定义与初始化 - 且听风吟

字符串的两种定义方式char数组char sa[] “hello world”;char指针char *sp “hello world”;这两种方式都产生了一个”hello world”的字符串常量,字符串常量存储在静态存储区中,静态存储区中的内容在程序运行的整个过程中都存在,而且只存储一份。数组…

python计算两字符串中的位置_python – 计算两个字符串之间距离的算法

是否有任何字符串距离算法没有考虑到单词的顺序?以下算法未提供所需结果(在该示例中,所需结果应为1):import jarojaro.jaro_winkler_metric(uMichael Jordan,uJordan Michael)>>>0.47import LevenshteinLevenshtein.ratio(Michael Jordan,Jorda…

php unset函数_PHP | 使用unset()函数从数组中删除元素

php unset函数Given an array and we have to remove an element from the array. 给定一个数组,我们必须从数组中删除一个元素。 unset()函数 (unset() function) To remove an element from an array, we can use a PHP library unset() function, it accepts th…

vi显示行号

vi显示行号 :set nu 带行号查看,并不改变文件内容:set nonu 取消带行号查看在每个用户的主目录下,都有一个 vi 的配置文件".vimrc"或".exrc"用户可以编辑它,使这些设置在每次启动 vi 时,都有效.例如,加入如下设置行:set nu 显示行号…

对象过滤某个属性 循环 php_37道PHP面试题(附答案)

1、什么事面向对象?主要特征是什么?面向对象是程序的一种设计方式,它利于提高程序的重用性,使程序结构更加清晰。主要特征:封装、继承、多态。2、SESSION 与 COOKIE的区别是什么,请从协议,产生的…

项响琴C语言书籍在线浏览,电子琴 c语言程序

实用#include unsigned char code table[]{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};unsigned char temp;unsigned char key;unsigned char i,j;unsigned char STH0;unsigned char STL0;unsigned int code tab[]{64021,64103,64260,…

Java File类boolean createNewFile()方法(带示例)

文件类布尔型createNewFile() (File Class boolean createNewFile()) This method is available in package java.io.File.createNewFile(). 软件包java.io.File.createNewFile()中提供了此方法。 This method is used to create a new file by using createNewFile() method a…

oracle   SQL执行过程

1.sql执行过程1>解析(判断对象是否存在,是否有权限查询,语义解析,检查缓存中是否有相同的SQL等等)2>优化(CBO确定优化模式,确定访问路径,联接顺序,过程中通过很多综…

vue-video-player修改src就会报错_4、修改入口点代码

在riscv上电时,会进行CPU自检,然后跳转到bootloader处执行。bootloader设置好kernel的运行环境后,从硬盘加载kernel到内存,最后再跳转到kernel入口地址。我们采用的bootloader为OpenSBI,被加载到0x80000000地址&#x…

数码管超声波c语言黑51,51单片机开发板-超声波测距-数码管显示

《51单片机开发板-超声波测距-数码管显示》由会员分享,可在线阅读,更多相关《51单片机开发板-超声波测距-数码管显示(16页珍藏版)》请在人人文库网上搜索。1、计算机技术系项目工作报告课程名称单片机开发板设计与制作实训班级学号姓名项目名称超声波测距…

java 方法 示例_Java ArrayDeque带有示例的removeFirstOccurrence()方法

java 方法 示例ArrayDeque类removeFirstOccurrence()方法 (ArrayDeque Class removeFirstOccurrence() method) removeFirstOccurrence() method is available in java.lang package. removeFirstOccurrence()方法在java.lang包中可用。 removeFirstOccurrence() method is use…

社交应用动态九宫格图片的规则

这里主要以微信和QQ空间为作为研究对象,得到的结论如下。 QQ空间里的动态 iOS设备,以iPhone6为分界 iPhone6及以上分辨率的设备: 当宽且高同时 > 512px时,判断 宽/高的比例值:大于 2时,以高度为基准&…

c语言实现链表结构6,用c语言实现的链表结构--数据结构实验

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include"stdio.h"//使用new指针来将临时变量重新初始化#include"stdio.h"typedef int ElemType;typedef struct LNode{ElemType data;struct LNode *next;}LNode,*LinkList;void InitList(LinkList &L)//…