zoukankan      html  css  js  c++  java
  • MySQL数据分析-(14)表补充:字符集

    大家好,我是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

    @数据分析-jacky

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

    @数据分析-jacky

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

    @数据分析-jacky

    • 前面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编码中比较和排序都有问题。

  • 相关阅读:
    数据库字段太多,批量快速建立实体类方法(适合大量字段建立实体类)
    SQL service 中的 ”输入SQL命令窗口“ 打开了 “属性界面” 回到 ”输入SQL命令窗口“
    计算机软件编程英语词汇集锦
    编程常用英语词汇
    svn上传和下载项目
    当启动tomcat时出现tomcat setting should be set in tomcat preference page
    Implicit super constructor Object() is undefined for default constructor. Must define an explicit constructor
    eclipse中选中一个单词 其他相同的也被选中 怎么设置
    Spring Boot的@SpringBootApplication无法引入的问题
    最全的SpringCloud视频教程
  • 原文地址:https://www.cnblogs.com/shujufenxi/p/9054414.html
Copyright © 2011-2022 走看看