• MySQL中char和varchar的区别?varchar(1)占用几个字节?


    背景

    依然是面试官提的问题,做一个复盘。

    char和varchar的区别

    区别一:定长和变长

    在MySQL中,char和varchar都是用来存储字符串的,区别在于char有固定的长度,而varchar属于可变长的字符类型。
    char有固定的的长度,所以在处理速度上要比varchar快很多,但是也相对更耗费存储空间,在速度上有要求的可以使用char类型。

    • char类型是规定多少字长则必须存储多少字长,超过的字段则只能截取出对应的长度进行存储,相对于要去字长长度不够的字段则用空格补齐。
    • varchar类型则是只要在规定字长之内,有多少就存多少,无需补齐;超出部分和char一样,舍去即可。(由prefix实现)
    区别二:存储容量不同
    • 对于char类型来说,最多只能存放的字符个数为255,和编码无关。
    • varchar最多能存放65532个字符,varchar的最大有效长度由最大行大小和使用的字符集来确定,整体最大长度是65532个字符。

    varchar(1)占用几个字节

    首先要考虑一下varchar的长度是按字节来算还是按字符来算。查阅了一下网上的答案:

    也就是:
    在version4之前,MySQL中varchar长度是按字节;而version5之后,按字符。如varchar(6),在version4,表示占用6个字节,而在version5中,表示占用6个字符。

    而字符和字节的换算,则与编码方式有关,不同的字符所占的字节是不同的。:

    • ASCII码:
      一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制。最小值0,最大值255。如一个ASCII码就是一个字节。

    • UTF-8编码:
      一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。

    • Unicode编码:
      一个英文等于两个字节,一个中文(含繁体)等于两个字节。

  • 相关阅读:
    面向对象1 继承与接口
    简易版爬虫(豆瓣)
    调用模块与包
    正则表达式2 以及configparser模块,subprocess模块简单介绍
    正则表达式(re模块)
    sys,logging,json模块
    常用模块(time,os,random,hashlib)
    内置函数与匿名函数
    day 19 yeild的表达式 面向过程 内置函数
    mysql中写存储过程加定时任务
  • 原文地址:https://www.cnblogs.com/xiaozhengtongxue/p/13754647.html
Copyright © 2020-2023  润新知