MSQL数据库的编码格式

早安试言
2020-09-10

一个UTF8占三个字节(也与操作系统版本有关,有的版本为3有的为2)(三个字节占一个字符),如果只存英文,则一个latin1占1个字节


      select length(“开心工作”);      查看开心工作占几个字节,需要先看他是什么编码格式,length为看字节数。


      select char_length("开心工作“);   查看有几个字符,为四个。



       当客户端发送“开心工作”时候,会告诉数据库它的编码格式是什么(character_set_client = utf-8)。如果为utf-8,三个字节占一个字符,所以此为12个字节;如果是latin


       总结一下就是说,无论是LENGTH()还是CHAR_LENGTH()都是为了统计字符串的长度。只不过,LENGTH()是按照字节来统计的,CHAR_LENGTH()是按照字符来统计的。例如:一个包含5个字符且每个字符占两个字节的字符串而言,LENGTH()返回长度10,CHAR_LENGTH()返回长度是5;如果对于单字节的字符,则两者返回结果相同。


那么,如何判断多字节字符是占两个字节,还是三个字节呢?继续查了点资料:

       原来这里的字节数和编码有关。所以回过头来看文章开头所描述的问题:因为编码是UTF-8,所以一个中文占3个字节,所以LENGTH(“轻松工作”)值为12。


      另外补充下,一个单词有几个字母就计几个字符.比如:maybe 这个单词由五个字母组成一个词,它的字符数为5


阅读55