zoukankan      html  css  js  c++  java
  • char与varchar区别

    区别一,定长和变长


    char 表示定长,长度固定,varchar表示变长,即长度可变

    区别之二,存储的容量不同


    对char来说,最多能存放的字符个数 255,和编码无关。
    而varchar呢,最多能存放 65532 个字符。
    VARCHAR的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是65,532字节
    最大有效长度是 65532 字节,在varchar存字符串的时候,第一个字节是空的,不存任何的数据,然后还需要两个字节来存放字符串的长度。所以有效长度就是 65535 - 1 - 2 = 65532
    由字符集来确定,字符集分单字节和多字节
    Latin1一个字符占一个字节,最多能存放  65532个字符
    GBK 一个字符占两个字节, 最多能存 32766 个字符
    UTF8一个字符占三个字节, 最多能存 21844 个字符
    注意,char和varchar 后面的长度表示的是字符的个数,而不是字节数。

    存储限制
    varchar 字段是将实际内容单独存储在聚簇索引之外,内容开头用1到2个字节表示实际长度(长度超过255时需要2个字节),因此最大长度不能超过65535。



    编码长度限制
    字符类型若为gbk,每个字符最多占2个字节,最大长度不能超过32766;
    字符类型若为utf8,每个字符最多占3个字节,最大长度不能超过21845。
    若定义的时候超过上述限制,则varchar字段会被强行转为text类型,并产生warning。
     
    行长度限制
    导致实际应用中varchar长度限制的是一个行定义的长度。 MySQL要求一个行的定义长度不能超过65535。若定义的表长度超过这个值,则提示
    ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs。

  • 相关阅读:
    一些经验
    倍增(在线)求LCA
    IDA*算法——骑士精神
    A*算法——第K短路
    (持续更新)一些黑科技和技巧
    逆元
    方便人类——信息学训练专用库
    PHP单点登陆
    PHP 中运用 elasticsearch
    PHP斐波那契数列
  • 原文地址:https://www.cnblogs.com/zhang0807/p/10266323.html
Copyright © 2011-2022 走看看