一、字符集

1.mysql的字符集设置非常灵活

可以设置服务器默认字符集;

数据库默认字符集;

表默认字符集;

列字符集;

如果某一级别没有指定字符集,则继承上一级。

查看所有字符集语句:show character set;

2.以表声明为utf-8为例,最终存储在表中的数据为utf-8

①我们要告诉服务器,我给你发送的数据是什么编码?character_set_client

②告诉字符集转换器,转换成什么编码?character_set_connection

③查询的结果用什么编码?character_set_results

如果以上三者都为字符集N,可简写为set names N;

3.什么情况下会出现乱码呢?

我们首先创建一个测试表指定表的字符集为utf8

create table temp(

name varchar(10)

) charset utf8;   //charset utf8;决定了服务器的编码

然后执行这三条命令:

set character_set_client=gbk;

set character_set_connection=gbk;

set_character_set_results=gbk; 这三句可以简写为set names gbk;

最后往表里插入一条数据:

insert into temp values('中国');

select * from temp;这时候显示的结果是正常的。

当我们再执行这句命令时:set character_results=utf8;

出现乱码了,如图:

由此可得出当返回的结果result的字符集与客户端的字符集不符的时候会出现乱码。

还有一种情况也会出现乱码:client声明与事实不符时,你客户端明明是utf8,你却非要叫我转成gbk的,如下图:

可能还有很多种情况,这里没有一一列举。

4.什么情况下会造成数据的丢失呢?

执行这三条语句:

set character_set_client=gbk;

set character_set_connection=latin1;

set character_set_results=gbk;

再往表里插入一条数据:insert into temp values('美国');

最后查询的时候结果如下图:

数据丢失了。

由此可得出当connection和服务器的字符集比client小时,会造成数据的丢失,可能用语不是很准确,但是能理解即可以了。个人理解,就跟java里面不同数据类型相互转换时一样,比如把double类型强制转换成int类型,就会造成精度的丢失一样。

。。。。。。    

ag:

旧服务器,类似于谷歌等,服务器使用的编码是gbk或者是gb2312 ,现在开发的页面使用的都是utf8,如何才能保证数据的不丢失

解决:其中connection可以设置为gbk或者utf8都可以

二、校对集

如果有a B c D按照asc排序,此时默认排序后的结果还是a B c D ,并不是按照ASCII排序的

什么是校对集?

校对集:指字符集的排序规则。

查看所有校对集语句:show collation;

一种字符集可以有一个或多个排序规则。

show collation like 'utf8%';将显示所有关于utf8的校对集

以utf8为例,默认是使用utf8_general_ci校对集,也可以按二进制来排,utf8_bin

怎样声明校对集?

create table tableName

(

  ...

)charset utf8 collate utf8_general_ci;

注意:声明的校对集必须是字符集合法的校对集。比如你字符集是utf8,你不能声明gbk的校对集。

mysql之字符集与校对集的更多相关文章

  1. mysql之全球化和本地化:字符集、校对集、中文编码问题

    本文内容: 什么是字符集?什么是校对集? 查看字符集和校对集 设置字符集和校对集 mysql中的中文数据问题 首发日期:2018-04-19 什么是字符集?什么是校对集? 字符集是字母和符号的集合,每 ...

  2. MySQL开发——【字符集、校对集】

    字符集 查看MySQL中的字符集 基本语法: show character set; 查看MySQL中的默认字符集 基本语法: show variables like ‘character_set%’ ...

  3. MySQL(一) -- MySQL学习路线、数据库的基础、关系型数据库、关键字说明、SQL、MySQL数据库、MySQL服务器对象、SQL的基本操作、库操作、表操作、数据操作、中文数据问题、 校对集问题、web乱码问题

    1 MySQL学习路线 基础阶段:MySQL数据库的基本操作(增删改查),以及一些高级操作(视图.触发器.函数.存储过程等). 优化阶段:如何提高数据库的效率,如索引,分表等. 部署阶段:如何搭建真实 ...

  4. mysql概要(九)字符集和校对集

    1.mysql 字符集有细致设置: 2.mysql字符处理机制是:数据库和客户端之间存在一个字符集转换器(后文简称转换器)将客户端字符编码(必须告诉服务端的)转换成一种中间编码的数据(可自定义的但保证 ...

  5. mysql补充(1)校对集utf8_unicode_ci与utf8_general_ci

    创建数据库并设置编码utf-8 多语言(补充1 2) create database mydb default character set utf8 collate utf8_general_ci; ...

  6. mysql字符集和校对规则(Mysql校对集)

    字符集的概念大家都清楚,校对规则很多人不了解,一般数据库开发中也用不到这个概念,mysql在这方便貌似很先进,大概介绍一下简要说明 字符集和校对规则 字符集是一套符号和编码.校对规则是在字符集内用于比 ...

  7. mysql中的字符集和校对规则(mysql校对集)

    1.简要说明介绍 字符集和校对规则 字符集是一套符号和编码.校对规则是在字符集内用于比较字符的一套规则. MySql在collation提供较强的支持,oracel在这方面没查到相应的资料. 不同字符 ...

  8. MySQL之字符集-校对规则

    一.字符集(Character set) 是多个字符(英文字符,汉字字符,或者其他国家语言字符)的集合,字符集种类较多,每个字符集包含的字符个数不同. 特点: ①字符编码方式是用一个或多个字节表示字符 ...

  9. MySQL字符集与校对

    一.什么是字符集与校对 1.字符集与校对 字符集是指一种从二进制编码到某种字符符号的映射. 校队是指一组用于某个字符集的配许规则. 2.utf8与utf8mb4 标准的UTF-8字符集编码是可以使用1 ...

随机推荐

  1. NFC(12)使用Android Beam技术传输文本数据及它是什么

    Android Beam技术是什么 Android Beam的基本理念就是两部(只能是1对1,不可像蓝牙那样1对多)NFC设备靠近时(一般是背靠背),通过触摸一部NFC设备的屏幕,将数据推向另外一部N ...

  2. jekyll themes

    jekyll主题下载: https://mademistakes.com/work/jekyll-themes/ https://github.com/jekyll/jekyll/wiki/Theme ...

  3. 基于邻接矩阵的广度优先搜索遍历(BFS)

    题目:http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2141&cid=1186 #include<stdio.h> #incl ...

  4. 【转】iOS中16进制转10进制

    原文网址:http://www.voidcn.com/blog/u012198553/article/p-4976772.html /// 将十六进制的字符串转化为NSData - (NSData ) ...

  5. MVC Action Filter

    ASP.NET MVC Framework支持四种不同类型的Filter: Authorization filters – 实现IAuthorizationFilter接口的属性. Action fi ...

  6. Gradle使用手册(一):为什么要用Gradle?

    原文地址:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Using-sourceCompatibility-1. ...

  7. ARM Linux 如何--注册和触发--软中断

    1. 注册软中断当然是通过open_softirq 例子如下: void __init init_timers(void) { int err = timer_cpu_notify(&time ...

  8. dll打包进需要发布的exe z

    http://www.cnblogs.com/Jarvin/p/3721195.html 我们需要发布的exe文件很多时候都可能会依赖于一堆松散的dll,如果想在发布 的时候只提供exe文件,而不想把 ...

  9. POJ 3208-Apocalypse Someday(数位dp)

    题意:给定n,输出第n大包含666的数字. 分析:dp[i][j][k][l]表示 长度为i,当前位是否是6,前一位是否6,是否已经包含666,表示的数量,再用二分找出第n大的这样的数字. #incl ...

  10. linu、C语言、计算机基础教程

    Linux操作系统入门教程:http://see.xidian.edu.cn/cpp/linux/ 鸟哥的linux私房菜:http://vbird.dic.ksu.edu.tw/ 计算机操作系统教程 ...