大家好,我是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. EF6.0中出现未找到具有固定名称“System.Data.SqlClient”的 ADO.NET提供程序的实体框架提供程序解决办法

    在多工程项目中,由于EF封装在某一个工程里,那么该项目用于EF相关类库 EntityFramework.dll,以及EntityFramework.SqlServer.dll的引用 那么你一个启动工程 ...

  2. pmtk3

    summary A list of every PMTK3 demo auto-generated by publishDemos on 27-Mar-2012 Book Demos (1) Intr ...

  3. Eigen 学习笔记

    1.  初始化 //外部指针初始化 ]={...}; ] = ...; kernels[].mu = Vector3d(_mu0); kernels[].sigma_inv = Matrix3d(_s ...

  4. 如何判断 Session是否存在

    相信很多人都跟我一样,在写网页中有些位置通过其他网页设置了 Session然后跳转到目标页面就需要要用 Session,但是那个位置如果是直接打开的就用不到 Session,那么问题就来了,例如:系统 ...

  5. 重构与反思-<重构代码的7个阶段>有感

    https://coolshell.cn/articles/5201.html/comment-page-2#comment-1932554 过去半年基本上完整经历了这个文章的各个阶段,看完文章结合自 ...

  6. Point to class member

    #include <iostream> using namespace std; class Student { public: Student(string n, int nu):nam ...

  7. Missing Push Notification Entitlement解决方法

    原委 最近提交APP到Apple Store审核,结果很快就收到Apple很"贴心"的邮件.原文如下: Dear developer, We have discovered one ...

  8. 二〇一八-美团工程师面试解析(Java)

    一轮面试: 小数是怎么存的 算法题:N二进制有多少个1 Linux命令(不熟悉 JVM垃圾回收算法 C或者伪代码实现复制算法 volatile 树的先序中序后序以及应用场景 Mysql存储记录的数据结 ...

  9. Win10建立标准账户并设置标准账户权限

    Win10建立标准账户,并使用组策略对标准帐户的权限进行管理. 注意:本文内容均在管理员帐户下操作,可以只看图片按图示步骤操作即可. 一.建立一个标准账户用于公用登录 (1)按”win健+R”运行“c ...

  10. python_网络编程struct模块解决黏包问题

    为什么会出现黏包现象: 首先只有在TCP协议中才会出现黏包现象,是因为TCP协议是面向流的协议,在发送的数据传输的过程中还有缓存机制来避免数据丢失,因此,在连续发送小数据的时候,以及接收大小不符的时候 ...