• msyql 字节问题


    MySQL 数据库的varchar类型在4.1以下的版本中的最大长度限制为255,其数据范围可以是0~255或1~255(根据不同版本数据库来定)。在 MySQL5.0以上的版本中,varchar数据类型的长度支持到了65535,也就是说可以存放65532个字节的数据,起始位和结束位占去了3个字 节,也就是说,在4.1或以下版本中需要使用固定的TEXTBLOB格式存放的数据可以使用可变长的varchar来存放,这样就能有效的减少数据库文 件的大小。
    MySQL 数据库的varchar类型在4.1以下的版本中,nvarchar(存储的是Unicode数据类型的字符)不管是一个字符还是一个汉字,都存为2个字节 ,一般用作中文或者其他语言输入,这样不容易乱码 ;varchar: 汉字是2个字节,其他字符存为1个字节 ,varchar适合输入英文和数字。
    4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节) ;
    5.0版本以上,varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个,最大大小是65532字节
    varchar(20)在Mysql4中最大也不过是20个字节,但是Mysql5根据编码不同,存储大小也不同,具体有以下规则:  
    a) 存储限制
    varchar 字段是将实际内容单独存储在聚簇索引之外,内容开头用1到2个字节表示实际长度(长度超过255时需要2个字节),因此最大长度不能超过65535。
    b) 编码长度限制
    字符类型若为gbk,每个字符最多占2个字节,最大长度不能超过32766;
    字符类型若为utf8,每个字符最多占3个字节,最大长度不能超过21845。
    若定义的时候超过上述限制,则varchar字段会被强行转为text类型,并产生warning。
    c) 行长度限制
    导致实际应用中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。

    ---------------------------------------------------------------------
    mysql的vachar字段的类型虽然最大长度是65535,但是并不是能存这么多数据,最大可以到65533(不允许非空字段的时候),当允许非空字段的时候只能到65532。

    总结char,varchar,text区别 

    长度的区别,char范围是0~255,varchar最长是64k,但是注意这里的64k是整个row的长度,要考虑到其它的column,还有如果存在not null的时候也会占用一位,对不同的字符集,有效长度还不一样,比如utf8的,最多21845,还要除去别的column,但是varchar在一般情况下存储都够用了。如果遇到了大文本,考虑使用text,最大能到4G。

    效率来说基本是char>varchar>text,但是如果使用的是Innodb引擎的话,推荐使用varchar代替char

    char和varchar可以有默认值,text不能指定默认值

  • 相关阅读:
    HTML多媒体标记之字幕标记
    认识JS的基础对象,定义对象的方法
    JDBC-ODBC桥接器连接Access数据库
    使用JQuery制作幻灯片(轮播图)
    开博11天后的第一次随笔!
    Springboot配置MongoDB连接增加mongoplus支持
    云服务器部署集锦 阿里ESC+docker+mysql+Portainer+rabbitmq+mongo
    centos8安装docker
    vue cli的使用
    MyBatis Plus数组list存入数据库之TypeHanlder类转换器
  • 原文地址:https://www.cnblogs.com/xmanblue/p/5132779.html
Copyright © 2020-2023  润新知