zoukankan      html  css  js  c++  java
  • 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编码:
      一个英文等于两个字节,一个中文(含繁体)等于两个字节。

  • 相关阅读:
    MySQL server has gone away
    Python读取excel拼接为sql文件
    Android10_原理机制系列_事件传递机制
    Android10_原理机制系列_Activity窗口添加到WMS过程
    Android10_原理机制系列_Window介绍及WMS的启动过程
    UNI-APP使用云开发跨全端开发实战讲解
    借助小程序云开发创建微信卡券
    今天,你成为这1/1000000了吗
    如何在云托管中操作云开发数据库?
    用云开发整一个专属网盘,原来如此简单!
  • 原文地址:https://www.cnblogs.com/xiaozhengtongxue/p/13754647.html
Copyright © 2011-2022 走看看