大家好,我是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,等等,而这些就叫字符集;


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

(二)中文数据问题的本质

我们讲第二部分,中文数据问题的本质,讲这一部分是回答我们第二个逻辑:字符集能给我们解决什么问题,jacky先说结论:中文数据问题的本质就是字符集的问题。

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

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

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

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

    • show create database demo;

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

做为服务器来说,我只关心服务器字符集和数据库字符集,我不用管你客户端字符集是什么;;服务器是看不见摸不着的,那我们mysql的客户端是什么,是不是各个系统版本的终端,比如Windows的终端就是cmd,Mac系统也有大家看到的终端,我们是不是在客户端中输入mysql -uroot -p的,那登陆成功后,我们从客户端是不是就登到服务器上来了,服务器是看不见摸不着的,我们要登进来才能看到,所以有时我们往数据表里插入中文的时候会出现乱码,就是客户端字符集与服务器字符集不一致造成的;

当前我们MySQL默认的是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. 如何修改MySQL已有表的字符集

    2019独角兽企业重金招聘Python工程师标准>>> 详细内容请见: 如何修改MySQL字符集 - xuzhengzhu - 博客园. 修改已有表的字符集: alter table ...

  2. MYSQL中修改表的字符集

    修改表的字符集: ALTER TABLE 表名 CHARACTER set  utf8;

  3. Mysql数据库,表,字符集,主外键等创建的sql模板

    ##如果存在同名的数据库,删除此同名的数据库. DROP DATABASE IF EXISTS cfms; ##如果不存在字符集为utf8的cfms这个数据库,那么就创建 CREATE DATABAS ...

  4. 怎么生产mysql.scok_如何更改生产MySQL数据库库表的字符集

    以前学习mysql的时候,实验的笔记,今天整理的时候看到了,所以记录下,备忘 1.导出表结构 mysqldump -uroot -predhat12345 -S /data/3306/mysql.so ...

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

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

  6. mysql查看当前表字符集_查看mysql字符集及修改表字符集

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

  7. mysql查看当前表字符集_查看mysql字符集及修改表结构--表字符集,字段字符集

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

  8. mysql字符集和表字符集_Mysql数据库表引擎与字符集

    Mysql数据库表引擎与字符集 1.服务器处理客户端请求 其实不论客户端进程和服务器进程是采用哪种方式进行通信,最后实现的效果都是:客户端进程向服务器进程发送一段文本(MySQL语句),服务器进程处理 ...

  9. Mysql的建表规范与注意事项

    一. 表设计规范 库名.表名.字段名必须使用小写字母,"_"分割. 库名.表名.字段名必须不超过12个字符. 库名.表名.字段名见名知意,建议使用名词而不是动词. 建议使用Inno ...

  10. MYSQL避免全表扫描__如何查看sql查询是否用到索引(mysql)

    MYSQL避免全表扫描 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引 2.应尽量避免在 where 子句中对字段进行 null 值判断,否 ...

最新文章

  1. Python将MySQL表数据写入excel
  2. 【云炬大学生创业基础笔记】第1章第3节 什么是创业的讨论
  3. Web前端开发笔记——第三章 CSS语言 第六节 CSS定位
  4. PHP连接sql seaver数据库
  5. python图书馆预约系统_python实现图书馆研习室自动预约功能
  6. HTML(Hepertext Markup Language 超文本标记语言)
  7. android 代码设置休眠,几行让Android进入休眠的C代码
  8. [每日一氵]笔记本电脑充电后卡得一批
  9. Everything研究之快速获取USN记录的文件路径
  10. 时钟(CLOCK)置换算法
  11. A `Concatenate` layer requires inputs with matching shapes except for the concat axis.
  12. 教你几个提升网站快速排名的好方法
  13. 清空缓冲区:fflush(stdin)、fflush(stdout)
  14. The old Padawan_最蛋疼的一个晚上
  15. 【小旭学长-使用python进行城市数据分析】笔记篇(上)
  16. 如何升级Jenkins版本
  17. ei eo 功能类型_[转载]CMMI之功能点估算法:EI、EQ和EO
  18. android2.3.7刷机包,中兴 天机2(S291)刷机包 官方Mifavor UI V3.1.7 Android 4.4 完整包
  19. 健身房管理软件_健身房管理系统集成方案
  20. MTK TP驱动移植

热门文章

  1. 免费申请国外免费域名保姆级教程
  2. 渗透测试流程(一)(千峰学习笔记)
  3. shadow 文件详解
  4. 基础软件皇冠上的明珠,数据库创新 | 创新场景50
  5. java远古部落7723_远古传说之华夏浩劫
  6. 高程数据下载——DLR_SRTM_说明
  7. 掌握TikTok商业化玩法,3大支点撬动亿万级流量市场
  8. could not extract ResultSet 错误
  9. 腾讯企业邮箱申请注册注意事项
  10. python实现搜狗新闻挖掘(一)