00:00
好,那咱们刚才讲解的这个内容的话呢,是一个重点,大家呢,需要知道我们这个如何设置这个字符集啊,为什么要设置字符集,这个是比较重要的,然后接着我们看下个点,就字符集与比较规则啊,这个内容的话呢,大家做一个了解就可以了,咱们再讲这个上篇的时候呢,实际上也没朦朦胧胧的呢,给大家说过这个U8和U8MB4这个事儿啊,什么意思啊,就是咱们在这个,嗯,这个8.0的时候呢,你会发现呢,我们默认的去收S的时候呢,它后边都叫MB4对吧?那我们在这个5.7当中,咱们呢,设置好以后,呃,在这儿呢,配置文件里边是不是加了TR8,然后我们回过来再去看一下咱们相对应的这个字符集的时候呢,它显示的都叫这个u tr8了。那U8MB4跟U8这是什么关系呢?哎,这呢,就是我们做一个这个解释。首先呢,我们说这个正宗的这个U8的话呢,这个字符集它呢,一个字符是需要一到四个字节呢来进行表示的。啊,什么意思啊,你比如说我们像这个ABC这样的这个字符的话呢,实际上我们在存储的时候呢,用一个字节就可以这个乘得下对吧,但是你像我们这个中文,比如说我在u cii里边呢,我们就需要呢三个字节呢来进行存储。
01:11
OK,就是一般情况下呢,一到三个字节其实就够了,但是呢,我们还是有一些特殊的符号呢,呃,一到三个字节就搞不定了啊,我们得需要一个更大的集合,那就涉及到得用四个字节来表示它,就是这样一个概念,OK,咱们平时呢,在5.7当中呢,写的这个叫u ti8,其实呢,他要是写全的话呢,相当于是u ti8MB3,也就是说呢,我们最终呢,使用三个字节来表示一个字符。而在8.0当中,明确指定了叫u ti 8MB4,也就是说我们最终呢,可以使用四个字节来表示一个字符,那区别呢,主要就是在这儿。啊,也就是说我们这里边呢,这就相当于U8MB3,而这呢,明确的就是MB4啊,就这个道理,这个写的UMB3呢,就相当于是U8啊就这个道理。行,那么差到哪儿了呢?那比如说我们要是存储一些像这个这个表情的话,对吧,那我们就需要用UT8B4了,正常来讲一般咱们用u ti8MB3呢,其实就够用啊,这个大家做一个了解其实就行。
02:10
好,那么下边的话呢,我们看一看咱们当前的这个,呃,针对MYSQL数据库服务器,它存储的这个字符集啊,或者说呢,它对应的这个比较规则看都有哪些啊,这个咱们在这个命令行这块来指定,比如我就在8.0里边去操作了啊,直接粘过来啊,直接回车,那看还是挺多的,一共是41行,对吧,这里边呢就指定了啊,其实有一些涉及到我们说u tr8的啊u ti8这个呢,就相当于MP3,这就是MB4了。还有其他的这样的一些这个字符集啊,对应的这个,呃,描述是什么啊,就有不同的国家呢去使用的对吧,然后呢,这块呢,就是对应的这个叫default,就是比较规则。啊叫比较规则,你会发现呢,这个我们所谓的这个字数集啊,跟它的这个比较规则呢,它都是有一些这个对应关系的。啊,对应关系的行,然后后边这块呢,就指定了它最多呢,可能要占用的这个字节数max,那比如说我们这个u ti8,它是不是最多占三个字节对吧?U ti8MB4呢,最多呢,就占四个字节。
03:11
哎,就是这样的道理啊,了解一下就行。然后呢,我们重点来说一下,这个所谓的叫比较规则,在刚才这个表格当中我们也能看到,后续呢,这个比较规则里边呢,你看都带着这样的一些后缀,对吧?首先呢,我们说这个比较规则是什么意思,你比如说我们这个这个往表中去添加数据的话呢,咱们写了一个啊,就是我就以这个英文为例吧,这个叫Tom啊,这个叫team,那我们可能会针对这样的字符串,是不是去比较大小啊,一方面一方面呢就比较大小,另外一方面呢,像你排序操作等等。包括我们还有汉字,那都会是涉及到大小的一个比较,那比较的时候呢,我们遵循什么样的规则呢?这里边儿就提到了,这叫比较规则。啊,所以说呢,这个比较规则呢,也跟我们对应的字符集呢,是有关联度的,对吧,你看这写的U8这块呢,通常也是U8的。啊,上面是这个,这个跟这个也都有关联度啊,这是这样一个情况啊,那么在这个比较规则啊里边,它后边呢,有这个不同的后缀,这个后缀是什么意思呢?大家做一个了解。
04:11
这个后缀呢叫AI啊,这个A呢,就表示这个重音的意思啊,Insensitive,这个ensive呢就是敏感的意思,Insenitive呢就不敏感啊,也就是说不区分咱们这个重音,这个呢就是敏感的,就是区分重音对吧?这个case就是大小写的问题,呃,Ins sensitive就是不区分大小写,而这个呢叫case sensitive,就是区分大小写的意思。啊,这个B呢,就bary就是二进制的方式进行比较的啊,所以你看这块写的比较清楚,也就相当于是我们比如说写的是这个的话呢,就是不区分重音,也不区分这个大小写啊,OK啊就这个道理啊,大家了解一下啊,最后一列呢,指明你占用最多占用几个字节是吧就可以了,后续呢,这块有一些常见的操作,大家了解就行啊,这个为了执行这个方便呢,咱们放在这个。在词要里边去跑吧,在这个150这个下边啊,我就直接粘过来了,这儿呢是查看一下我们JBK开头的这样的一些比较规则。
05:07
啊,这块有两个是吧,JK呢叫并啊JK下线CI啊,这个CI呢,就是不区分大小写啊,就是你在使用JK这样的自助集的时候呢,可以调这两个中的任何一个,你看你想用哪个对吧?然后我们看这u ti8啊走一下。这个UI8呢比较多,你要是选择UI8这样的一个次数集的话呢,你可以啊,是不是对应的去选择它对应的比较规则,那这个规则也很多啊,有的比较这个这个大小写敏感的,有的不敏感的是吧等等的啊,你看还是比较多的啊,可以去做自由的一个选择,呃,一般的话呢,咱们这个用UT8,不管你是MP3也好,MP4也好,咱们通常使用的呢,看这块我能找着不。啊,就这个咱们通常使用的话呢,就是呃,UTL8MB4这个general_CI。就用这个就行,它有的还有那个叫unicode的,应该是在后边。
06:03
啊,这个是吧,这个有时候我们也用啊,主要用这俩,其他的这些呢,我们就用的相对来说就少一些啊了解一下就可以,然后的话呢,下边这个一波呢,就涉及到我们可以去查看和一些修改的问题,哎,这个也是做一个演示就行,拿过来。看一下。在这儿查看我们服务器的字符集和比较规则啊,这呢就服务器的呗,啊走一下。那服务器的话呢,这里边比如我们就是character set server,它用的是U点8M4,这个相当于是它的这个算是级了,对吧,那对应的这个比较规则呢,那这不叫coll嘛,然后就是它啊,它用的它是这个是吧,OK。行,然后呢,这是查看我们这个数据库的字符集合,比较规则来,我们选中。呃,这块你看是对应的这样一个选项啊,没有问题,好,然后查看具体的数据库的次数集,比如说呢,就拿咱们,呃,8.0当中啊,8.0当中咱们F5刷新一下,这不我也创建了个DB1对吧,我们刚才呢,是在这个叉里边创建的,查看一下它的这个情况,在查看的过程当中,我们也能够看到它使用的这个比较规则,那U8按B4。
07:08
啊,因为这个四书集呢,是U点8MB4的。啊,所以这是他的这个啊,后边这个跟咱们前面这个,呃,你服务器的设置这个服务器这个设置完以后呢,这个我们没有再设置,其实也是默认的,跟前面的都一样,是这意思吧。好,然后下边我们可以修改具体的数据库的一个字符集,这是一个修改操作,了解一下就行,Al这个这个data啊,数据库名default啊,这个default这个也可以去掉对吧?啊character set,然后然后后边指明这个我们给它改成是个比如general的来啊操作一下啊,走起。可以了,然后呢,我们再去做一个受啊,查看一下那这块我们是不是就诶。没呈现出来是吧。嗯,这块呢,DB1。啊,没看到了是吧,嗯,实际上呢,这时候呢,它相当于就是用的我们这个这样的一个方式了。
08:00
啊,这样一个方式啊好,这个呢是我们说的这个数据库,然后呢,我们再看一下关于这个表啊这块多说些这个事儿吧,这个U8比较规则里边呢,一个叫unode,一个呢叫做general啊这俩的这个区别,那这块有个说明啊,校对速度一个快一点啊快的话呢,就是准确度就稍微差一点,准确度高的话呢,这个速度稍微慢一点。呃,一般的这两个啊,对于中英文来讲呢,就没有实质的差别了,呃,咱们正常情况下呢,使用这个general的方式就行,但是如果呢,里边包含的其他的一些语言的符号,那我们就建议你用这个unode啊了解一下就行。好,下边我们修改了数据库的,注意数据库的默认字数集合比较规则,呃,那么原来已经创建的这个表的它不会变,只会影响我们之后的这个新创建的表的自如集合比较规则,这个大家应该都清楚,咱们上面也提到过,对吧?好,下边是关于这个表的这个操作啊,也是作为一个了解。咱们站过来跑一下。嗯,好,查看这个表的这个词符集在我们这个DB test1这个下边,咱这先得加一个啊,就use一下DB test1,使用一下我们这个数据库。
09:10
然后呢,咱们这个表呢,叫EP是吧,查看一下我们这个表的这个情况在这里边,嗯,我们这个,呃,查赛是不是UT8MB4,然后这个是啊是不是它啊,你看咱们刚才呢,修改了这个DB1啊,你发现呢,这个它还是用的是之前没有改之前的这样一个比较规则。啊,因为它会对我们已经创建的这个呢,是不会产生影响的,然后再查看我们这个表的一个比较规表的一个比较规则。这是基于具体的数据库了。嗯,表的比较规,呃,这是查看这个字符集,其实这个字符集里边呢,已经把这个比较规则呢,给我们是不是也呈现出来了。啊,那你要是单独的就想查看这个比较规则的话呢,你可以用这个指令啊DB test1,诶我们这叫E1对吧?啊,这里边你也可以加相关的这种这个通配符啊,也可以来我们选中走起。
10:00
我们这里边儿呢,在这个数据库下呢,就只有一个啊,这个相当于后缀呢,是延PE这样的一个表,这里边儿呢,有一个字段。嗯,在这是叫coll啊,这块呢,指明的就是这个比较规则,它是以这种专门的一个属性的方式呢,给我们呈现出来的。啊,了解一下就行,咱们呢接下来还可以去修改表的字符集,咱们那会儿呢也讲过改字符集了啊,那进一步的话呢,还可以在后边加一个,还去再改一下它的这个比较规则是吧?诶你看这个呢是0900,然后我们把这个操作呢,选中走起一下。那然后呢,我们再去选中这个来操作走来这块,你再看是不是就改成这个UTF8这种是吧,哎,CI的模式了。行,那么关于这个比较规则呢,它的主要作用是什么,如何去修改啊,在我们这里边儿呢,给大家做了一个演示,整体呢大家做个了解,所以没有必要呢,我们就一个一个去敲了啊行,这就过了。然后下边这块的话呢,嗯,其实也是个了解啊,但是相对来说我觉得比上边这个呢要更重要一些,好回过来我们来解释啊,当然你看咱们在这个150,我就以150为例了,咱们在使用这个指令呢,查看这个字符集的时候,嗯,咱们那会儿呢,讲这个字符集重点说的是这个server和这个data。
11:12
对吧,那这哥俩的话呢,咱们就说清楚了啊,就抛掉了,那下边的话呢,我们再说另外的三个这个属性,一个呢叫做啊这个呢是U点八的,还有一个呢叫做connection啊,这也是U8的,还有一个呢叫做results。啊,你看这个也是U发的。对吧,那在这个,嗯,5.7当中,咱们往上去翻。嗯,翻已经翻到这儿了。找一下好看这啊,咱们在这5.7当中的时候呢,当是你发现咱们默认的情况下呢,这个server呢是拉丁,这个database呢是拉丁,这都没问题,那咱们改这个配置文件呢,咱们改的其实相当于是这个server,他改完之后呢,这个database呢,自动的相当于也跟他呢去默认一致了,是这意思吧,那我们这个表里边呢,你会发现呢,本人家的这个还有这个results是不是这仨呢,本身就是UF8的。
12:06
是吧,诶注意到这样的一个事实,那么这哥仨呢,是干什么用的?诶这块呢,就会涉及到了我们这三个变量的一个应用场景,就是我们从请求啊,用户的请求到整个用户的响应这个过程当中,这个字符集的一个变化啊,此时呢,就会用到了我们刚才提到的这样的三个变量。啊,或者叫三个属性啊也可以。啊,就是我们刚才说的这仨对吧?呃,那么我下边呢,相当于是一个演示的一个过程啊,就是写了一个具体的例子,呃,让大家呢去体会一下,说这哥仨呢,到底都干什么用的,呃,那么为了方便给大家去展示,我把中间这个叫character set。啊,上面这个第一个跟第三个还是U8的,把这哥们呢改成GBK。那我把它改成JBK了,那我们接着呢,就来分析一下这个过程当中,这几个字数集呢,它是怎么起作用的,好嗯,这里边呢,我们有一个叫我是吧,哎,我以他为例啊,然后把它们就这样盯一下。
13:05
这个我是一个他,然后我们首先呢,会涉及到那比如说咱们现在客户端要做个事儿啊,我客户端呢,就从咱们用户呢,嗯,比如说咱们使用这个色库要吧。咱们在Windows环境下呢,是不是相当于一个呃请求是吧?诶我们发出去了,这个候呢,咱们写了一个汉字,这个叫我啊就发出来了,你发出来的时候呢,咱们在传输的过程当中啊,咱们相当于是不是都得是以二进制的方式去传输,那就意味着我这个这个我的话呢,应该要按照指定的字数集,是不是把它转换成二进制的数据啊。那这时候呢,使用什么呢?就跟你具体的操作系统是相关的啊,Unix呢默认的就U8 Windows呢默认的是JK啊,那呃使用具体的客户端,比如我们circle呀,NAV k呀等等,那可能跟那个具体的客户端的他的一个设置行为呢又有关了。啊,这块呢,呃,这个客户端咱们在创建的时候呢,其实用的都是UTF8的,所以呢,默认相当于传输也是用的U8,好呃,那这块这个我在UI8当中呢,它对应的这个字节啊,这个数是吧,它是。
14:07
叫这个数啊,你就知道这个就行,是不是这样的,你看三个字节对吧,好,那么这个呢,对应的JBK的话呢,它的字节呢,是长这样,我先粘过来啊。哎,它是长这样的,多长了一点。这样这能看到在JPK当中一个汉字咱们知道呢,是占两个字节,那这不就两个字节嘛,OK,没问题,行,那下边呢,咱们通过这样一个表格,我给大家呢去做这个说明,好,那咱们在这个客户端上,你就比如说咱们在Windows操作系统当中,咱的这个里边我写了一个select对吧,查询语句,然后在这个where当中呢,有这个我然后呢,我们就把这个呢发出来了,发出来的时候呢。那这时候呢,咱们需要使用这个操作系统指定这个字符集啊,然后呢,去按照这个规则呢,给它做一个转化,以这种二进制数据的方式呢去传输,那我们如果使用的是UI8的话啊,我把这个再粘过来。
15:04
那你要使用U8的话呢,它翻译出来呢,就是我们的这个好,那这块,比如我们用的就是U好翻译过来了,翻译过来以后的话呢,诶,那么这个是一个二进制的数据,它首先呢需要呃,针对于我们这个里边的character set,那如果说我们这个character set啊,我复制一份啊。Can c。啊,这个复制不了,再重新粘一个。如果我们这个呃,Character它指定的是这个UI的话呢,它就能够把我们这样的一个,呃,这个二进制的这个数据是不是在翻译成我呀。啊,这个我就来了。啊,这个,诶这样是吧,好,那这时候呢,就相当于是针对于它翻译过来的,那这个翻译的时候呢,大家一定要注意的,诶我们这块呢,传输的时候呢,用的是UI8,这块你翻译的时候呢,是不是也一定得是UTF8呀,否则的话呢,就会出现乱码的问题了,比如说你这块呢,要是用的这个JBK,那就麻烦了,JBKJBK里边我们说一个汉字呢,是占两个字节,相当于它就会把这两合一起当做是一个汉字了,那有很有可能啥也不是。
16:12
对吧,就不合适了,所以这个和我们的这个是一定要一样的。好,那么这时候呢,我们使用这个呢,就成我了,下一步的话呢,我们就要考虑你这个set这块呢,咱们刚才刻意的是不是把它呢改成是这个JPK了啊让它呢,就是刻意跟我们这个U百8不一样,对吧?好,那我们改成这个JBK以后。啊,这个我们呃,先这么着一下吧,那么这个我啊在这个JPK下的话呢,它接着呢,就在翻译成是我们这样的一个序列了。啊,就我们这样一个序列,相当于这个我呢经过我们这个JK的啊,这个是connection这样一个设置,它又翻译成了一个呃,字节的方式啊,或者叫二进制数据的方式,呃,这个呢,跟我们最出这个就不同了,然后这块的话呢,呃,就会涉及到咱们底层做这个查询啊,咱们是不是到数据的具体这个表里边呢,咱们开始去做查了,看看是不是有一列的这个数据,呃当中的对应的这个值是这个,呃咱们现在其实没有我这个概念啊,就是纯比这个数了,是不是有个数恰好跟它是完全一样的,那有这个数的话呢,相当于我们是不是就从这个表中找到了这样的一条记录了。
17:22
哎,找到这两条记录了,好,那么找到这条记录以后,那我们这个character set这个results,嗯,他呢,比如说也是一个UTF8的。把他呢,再听一下,就我们此时呢,刚才说的,咱们是不是从这个具体的表当中去找,你看哪一列里边呢,关于你这个呃,字段的这个值是不是恰好的是我们这里边这个二进制的这个数据是吧?然后这个数据呢,找到以后呢,就相当于是我们能够匹配这个数据了,然后呢,咱们需要呢,从这个character set connection当中,把这个数据呢,给它再还原成你对应的一个字符。
18:00
那这个在还原的时候呢,诶注意到啊,这块这个细节没说,咱们这个表中啊这个呃,CR这个字段呢,也是用的JBK的这样一个字符集啊,如果要不是JBK呢,还得需要做个转换了啊,它也用的是这个JBK,那就意味着呢,咱们诶刚才呢,这里边啊,这个A稍微再往下再拽一点啊。哎,那就意味着我们这里边呢,这个值还需要呢,把它啊,因为你这个表中这个字段用的也是JBK又翻译出来了啊,变成了我。那这不就翻译成变出来了我了行,那这个时候呢,相当于是我们就我这个就出现了,我出现以后的话呢,我们拿着这个,我再看一下,你要给我们的客户端去返回了,那这时候返回的时候呢,咱们的character set results呢用的是U8。那这样呢,就把我这个我再诶通过u ti8的方式呢,是不是再进行一个编码。编码的话呢,是不是又得到了我们具体的这个值啊。诶把这个呢,我们再给他盯一下,相当于呢,我们再以这个二进制数据的方式呢,再往回去返,返回来以后呢,我们再来看一下我们这个客户端响应这块呢,使用这个字符集,哎如果响应这个字符集呢,咱们用的也是这个u tai8啊或者呢,不能叫也是的,只能说叫必须式,对吧,那通过这个u tai8呢,咱们再给它做一个还原,诶还原出来呢,就是我们这个我的这个数据,诶这就回来了。
19:20
哎,这呢,就是我们演示了一下整个这个过程当中涉及到的这个character set connection,还有我们这个results啊,它这样的一个过程啊,那通过这个过程的这个讲解呢,我们需要大家掌握的点是什么呢?呃,第一个就是我们在从这个客户端发送这个请求的时候呢,要求我们这个请求使用这个字符集,跟我们在这个服务器处理过程当中,最初的这个兰这个字数集,它俩呢是必须要一样的。这俩要不一样的话呢,相当于我们在翻译出来的时候呢,这块就翻译错了啊,你明明发来这个,我到这块呢,有可能是一个不认识的一个字符了,这块是个问题,进而你查的时候呢,就查不到了。对吧,这是一个点,然后其次的话呢,就是我们在返回这个响应的时候呢,咱们此时的这个character呢,使用的是U8,那比如我们明明查到这个数据呢,以u tr8的方式呢,进行编码返回给我们的客户端,但是客户端这块呢,进行解码的时候呢,使用的不是u tr8啊,那这时候又麻烦了,这时候肯定是出现就乱码了,所以咱们要求呢,就是这哥俩呢必须要一样,然后这哥俩呢必须要一样。
20:23
啊,这个大家注意一下,中间我们这个character set connection是可以不一样的。啊,可以不一样的行,这是我们需要大家呢,呃,掌握的这个点,那其次的话呢,就是在实际开发当中啊,咱们也没有必要呢,非得一会儿U,一会儿GBK,一会儿用别的,呃,咱们在实际开发当中啊,咱们说呀,大家呢,其实就统一的使用,是不是UTF8就可以了呀。好,把这几个小点呢给大接干掉一下啊,统一的使用U8就行了,那我们就可以呢做这样的设置赛一下啊,123这三个这个值呢都是调成U8的,那你要都这样写的话还挺麻烦的,怎么办呢?你可以直接呢就写个叫set names u8,那就相当于是呢,把这三个呢都设置成是UI8的了。
21:07
啊就可以啊,那另外一个方式呢,就大家还可以在我们的这个配置文件当中呢,在这个可烂的这样的一个标签下边呢,做这样一个设置,跟我们set names u是一样的道理,好这块呢,大家做一个了解就行,前面这个呢,刚才我说的这个谁跟谁必须要一致,需要大家呢去掌握。
我来说两句