大家好,我是jacky朱元禄,很高兴继续跟大家学习《MySQL数据分析实战》,本节课程jacky分享的主题是表补充之字符集

  • 在分享课程之前,jacky在跟大家强调一下逻辑的重要性,我们学习任何一门技术首先要捋清楚的就是逻辑,对于本节课来说,我们要捋清的逻辑就是:

    • 1)字符集是什么,它存在的意义是什么?
    • 2)它能给我们解决什么问题?
    • 3) 为什么我们在创建表这里讲这个字符集,它跟我们前面讲的数据类型、字段属性、索引有什么传承关系?
      • 或者说对于整个课程来说,为什么我们不在前面的课程,或后面的课程来讲字符集,我们要在这堂课来讲,jacky肯定是有他安排的逻辑在的,这些我们都要搞懂,我们说搞懂逻辑比搞懂知识点本身更重要;

    下面我们来说字符集,确切的说是MySQL中的字符集

(一)计算机字符集的由来

我们讲第一部分,计算机字符集的由来,讲这部分是回答我们第一个逻辑:字符集是什么,它存在的意义是什么?


为了讲清楚这部分,jacky先给大家讲个故事:


很久很久以前,有这么一群人,发现了计算机的最底层逻辑,就是电路,现阶段,我们人类处理电路可能的办法只能是让它通电,或者不通电,这时这群人就想:对于电路最底层的两种状态通电和不通电,我们是不是能标记一下,那怎么标记呢,我们可以用0和1代表这两种状态是不是,那这群人通过大量的实践发现,可以通过8个开关通电与不通电来组成不同的状态,我们就可以表示世界上的万物了;我们说一个开关是不是有通电和不通电的两种状态,那么这群人就把这一个开关命名为一个“字节“,8个开关是不是就是8个字节,那每个字节的都有两种状态,那8位字节就可以组成2的8次方,256中不同的状态,在后来,这群人又做了一些可以处理这些字节的机器,机器开动了,可以用字节来组合出很多状态,状态开始变来变去,这个机器,就是最早的计算机,发明计算机的这群人是美国人,它们后来呢又把所有的空格、标点符号、数字、大小写字母分别用连续的字节状态表示,一直编到了127号,这样计算机就可以用不同字节来存储英文的文字了。这些美国人看到这样,都自我感觉不错,它们就把这个方案叫做ASCII方案(方案的全称叫美国信息互换标准代码 American Standard Code for Information Interchange),当时世界所有的计算机都用同样的ASCII方案来保存英文文字,后来世界各地都开始使用计算机,但是很多国家用的不是英文,后来呢,随着计算机的世界性普及,为了可以在计算机保存各国的文字,一些人决定用127号之后的空位来表示这些新文字,就演变出了许许多多的编码方案,比如我们这次课要说的,utf8,latian1,GBK,等等,而这些就叫字符集;


好,那我们在做一下总结:由于计算机仅识别二进制数据,而且人类则更倾向于识别字符(符号),因此就需要一个二进制与字符的对应关系,这就是字符集。

(二)中文数据问题

好,前面我们把字符集是什么,它存在的意思是什么讲清楚了,接下来我们说说字符集能给我们解决什么问题-中文数据的问题,我们说中文数据问题的本质就是字符集的问题。

(二)MySQL表的字符集

一般来说,库的字符集是什么,表的字符集就是什么,当然MySQL服务器还有一个字符集,那么这个逻辑就是服务器的字符集是什么,库的字符集就是什么,库的字符集是什么,表的字符集就跟着是什么;

那怎么查看,我们当前状态下这些字符集都是什么呢?

-- 查看服务器端的基本信息
\s

  • show 是查看东西的,我想查一下,创建demo数据库的那一刻,创建数据库详细的创建语句,表面上看我们创建demo数据库的SQL语句是create database demo;其实后面还有一些东西是系统自带的,默认的,我们看一下:

    • show create database demo;

  • 我们看到创建demo时后面是不是还跟着一些东西,default character set latin1是不是?这一串是什么意思呢?这一串的意思是demo的默认字符集被设置为latin1,我们说的这是库层面,我们在看看表层面:

  • 前面jacky讲的创建数据表的SQL语句模型是什么,我们回忆一下:
--创建数据表的SQL语句模型
CREATE TABLE 表名称(
字段名1 数据类型 [属性]
字段名2 数据类型 [属性]
......
);
  • 跟创建数据库一样,圆括号结尾我们后面还跟了默认的一些东西,这里jacky插一句额外的话,我们再看看我们创建数据表的SQL语句模型,是不是我们讲表补充的一直是围绕这个模型来讲的额,这个模型是不是就是jacky讲解的逻辑线,而这些是不是都是怎么创建数据表,说了这么多,是不是都是说的怎么创建表,那有朋友会说,jacky一个创建表就讲了这么多,没有必要吧,没必要讲什么数据类型,属性,索引吧,我直接创建一个表create tabel 表名(id int),不就可以了吗?那我会怎么跟你解释呢:还是借用开篇的话吧,学习是为了什么,为了实现梦想,财务自由是吧,MySQL跟其他的技能一样,都是细节决定成败,为什么有些人表面上看着能力,但是在细节的处理上差的太多,对于技术来讲,细节才是真正决定成败的,所以做的差不多的工作,有人一个月3000,有人一个月3万,就是这个道理,我们在细节上下了功夫,而这些细节是必要的,jacky才会去讲,像全文索引这样的知识点,食之无味,弃之可惜,jacky就让大家自学了;

  • 好,我们言归正传,我们觉得上面SQL模型就结束了吗?其实还有ENGINE=InnoDB Default CHARSET=latin1,ENGINE=InnoDB什么意思?这张表是InooDB表引擎,表引擎是什么,下次课jacky会详细的说,这次课,大家只要记住:表引擎决定了你表里面存储数据是什么样的形态,记住这一句就够了,详细的jacky下次课会说,那么InnoDB,后面又跟了什么?Default charser=latin1,就是说我们在创建表的情况下,不强行设置表的字符集,我们MySQL是不是会给你默认一个字符集,

用latin1,没有好处,只有坏处。

MySQL开发者为瑞典MySQL AB公司,所以默认编码为latin1。

早期版本的编码都是latin1, latin1编码可以认为无字符格式的编码,什么字符都可以存,乱玛也可以存,至于里面是什么内容,只能靠客户端的程序来解释,这样你的程序里就莫名奇妙的要多了一个识别和转换编码的步骤。程序复杂度冤枉的增加了,性能也受影响。而且,在latin1编码中比较和排序都有问题。

MySQL数据分析-(14)表补充:字符集的更多相关文章

  1. ERROR 1366 (HY000): Incorrect string value:MySQL数据库、表的字符集为GBK

    mysql> update userinfo set MEDIASOURCE = 'CS02-北京' where IMPORTNO = 'IMP201640613101206';ERROR 13 ...

  2. MySQL数据分析-(15)表补充:存储引擎

    大家好,我是jacky,很高兴继续跟大家分享<MySQL数据分析实战>,今天跟大家分享的主题是表补充之存储引擎: 我们之前学了跟表结构相关的一些操作,那我们看一下创建表的SQL模型: 在我 ...

  3. MySQL数据分析-(13)表操作补充:索引

    大家好,我是jacky朱元禄,很高兴继续跟大家学习MySQL数据分析实战,今天跟大家分享的主题是表补充之索引: (一)前面课程的小节以及本节课程的逻辑梳理 在正式分享主题之前,jacky先跟大家捋顺一 ...

  4. MySQL数据分析-(12)表操作补充:字段属性

    大家好,我是jacky朱元禄,很高兴继续跟大家学习MySQL数据分析实战,今天我们分享的主题是表操作补充之字段属性,依照惯例第一部分,jacky先跟大家分享本课时的学习逻辑 (一)学习逻辑 我们说创建 ...

  5. MySQL数据分析-(11)表补充:数据类型

    大家好,我是jacky,很高兴继续跟大家学习<Mysql 数据分析实战系列教程>,上次课程jacky讲解了表层面的增删改查,jacky说最重要的是增,增就是创建表,作为一个严谨的MySQL ...

  6. MySQL数据分析-(10)SQL基础操作之表操作

    大家好,我是jacky,很高兴跟大家继续分享MySQL数据分析实战课程,前面我们学习了库层面增删改查的SQL语句,这次课jacky将给大家介绍表层面的增删改查, (一)本课时的学习逻辑 表层面的增删改 ...

  7. mysql更改已有数据表的字符集,保留原有数据内容

    mysql更改已有数据表的字符集,保留原有数据内容     原文网址:http://blog.csdn.net/learn_2/article/details/6460370 环境:在应用开始阶段没有 ...

  8. 修改MYSQL数据库表的字符集

    MySQL 乱码的根源是的 MySQL 字符集设置不当的问题,本文汇总了有关查看 MySQL 字符集的命令.包括查看 MySQL 数据库服务器字符集.查看 MySQL 数据库字符集,以及数据表和字段的 ...

  9. MySQL数据分析-(9)库操作补充:用户管理和权限管理

    大家好,我是jacky,很高兴继续跟大家学习MySQL数据分析实战,本节课的主题是用户管理和权限管理: 在分享之前,jacky在不厌其烦的强调一下:学习任何一门学科和技能,最重要的是捋清逻辑,我们要知 ...

随机推荐

  1. 八、wepy代码规范

    变量与方法尽量使用驼峰式命名,并且注意避免使用$开头. 以$开头的标识符为WePY框架的内建属性和方法,可在JavaScript脚本中以this.的方式直接使用,具体请参考API文档. 小程序入口.页 ...

  2. 结合python实现的netcat与python实现的tcp代理,建立一个流量隧道

    在proxy中 python2 proxy.py 127.0.0.1 3334 192.158.1.111 80 true 作为服务器在本地3334端口进行监听, 作为客户端连接远程web服务器192 ...

  3. Linux学习笔记:cut命令

    基础 功能:文件内容查看,显示行中指定部分,删除文件中指定字段.cut 命令用于显示每行从开头算起 a - b 的文字. 语法: cut [-bn] [file.txt] cut [-c] [file ...

  4. JavaScript--常用对象的属性及方法(2)

    Array对象(数组) 数组最常用属性:length 获取数组的元素个数 方法: toString() 将数组转换为字符串 var arr = ["武汉市","成都市&q ...

  5. ajax请求的五个步骤

    创建XMLHttpRequest异步对象 var xhr = new XMLHttpRequest() 设置回调函数 xhr.onreadystatechange = callback 使用open方 ...

  6. #LOF算法

    a.每个数据点,计算它与其他点的距离 b.找到它的K近邻,计算LOF得分 clf=LocalOutlierFactor(n_neighbors=20,algorithm='auto',contamin ...

  7. Masonry个人笔记

    1.有些场合需要获取View在约束之后的frame.直接init初始化后取出来的均为(0,0,0,0).在以下方法中获取即可: View: - (void)layoutSubviews ViewCon ...

  8. 还在用ABAP进行SAP产品的二次开发?来了解下这种全新的二次开发理念吧

    Jerry从2018年底至今,已经写了一系列关于SAP Kyma的文章,您可以移步到本文末尾获得这些文章的列表.Kyma是SAP开源的一个基于Kubernetes的云原生应用开发平台,能够允许SAP的 ...

  9. Scyther攻击输出图的解释(之二)

    下面对 Needham-Schroeder 协议形式化分析 的攻击输出图 做一个解释: Needham-Schroeder使用ns3表示, ns3 协议形式化描述结果如下: /*  * Needham ...

  10. django中解决跨域问题

    -跨域问题 -浏览器的:同源策略,浏览器拒绝不是当前域域返回的数据 -ip地址和端口号都相同才是同一个域 -如何解决: -CORS:跨域资源共享 -简单请求:发一次请求 -非简单请求:非简单请求是发送 ...