MySQL提供了多种关于字符存储的类型,但是在大多数情况下我们只使用charvarchar即可

类型 大小 用途
CHAR 0 - 255字符 定长字符串
VARCHAR 0 - 65535字符 变长字符串
TINYBLOB 0 - 255字符 不超过 255 个字符的二进制字符串
TINYTEXT 0 - 255字符 短文本字符串
BLOB 0 - 65 535字符 二进制形式的长文本数据
TEXT 0 - 65 535字符 长文本数据
MEDIUMBLOB 0 - 16 777 215字符 二进制形式的中等长度文本数据
MEDIUMTEXT 0 - 16 777 215字符 中等长度文本数据
LONGBLOB 0 - 4 294 967 295字符 二进制形式的极大文本数据
LONGTEXT 0 - 4 294 967 295字符 极大文本数据

字符集

  字符串分二进制与非二进制类型,二进制用于储存图片、声音等文件,非二进制用于储存文本数据。

  非二进制文本受字符集和校对规则影响。

  其实字符集说白了就是字符编码。

 

概念解析

  字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同。常用的字符集有GBKBIG5UTF8

  UTF8字符集包含文字内容更广,如韩文、日文、德文兼容度更高,也是推荐使用的字符集(UTF8MB4)。

表不设置字符集继承数据库,字段不设置字符集继承表的,所以一般我们在配置文件中为数据库指定字符集即可

SHOW CHARACTER SET; -- 查看服务器支持的字符集

校对规则

  字符集内用于字符比较和排序的一套规则,以_ci结束的为大小写不敏感、_bin结束的为不区分大小写。

  当使用不区分大小写的校对规则时Aa是相同的,否则则不相同,这会影响到排序与比对。

修改表校对规则,对表的原字段将不影响,只对新增字段影响

SHOW COLLATION; -- 查看服务器支持的校对规则

基本定义

   对于字符类型而言,其指定宽度均为存入宽度,以字符为单位。

create table temp(
        ch char(5) not null, # 最多5个字符
        vc varcha(5) not null # 最多5个字符
);

定长变长

区别差异

   char是定长字符串,当存入的字符数量不足指定宽度时,将会使用进行填充。

   varchar是变长字符串,当存入的字符数类不足指定宽度时,不会使用任何字符进行填充。

   通常情况下来讲char的存取速度要比varchar要高(约50%),但是更加浪费磁盘空间

   在InnoDB存储引擎中,不存在这种差异。

#官网:https://dev.mysql.com/doc/refman/5.7/en/char.html
#注意:char和varchar括号内的参数指的都是字符的长度

#char类型:定长,简单粗暴,浪费空间,存取速度快
    字符长度范围:0-255(一个中文是一个字符,是utf8编码的3个字节)
    存储:
        存储char类型的值时,会往右填充空格来满足长度
        例如:指定长度为10,存>10个字符则报错,存<10个字符则用空格填充直到凑够10个字符存储

    检索:
        在检索或者说查询时,查出的结果会自动删除尾部的空格,除非我们打开pad_char_to_full_length SQL模式(SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';)

#varchar类型:变长,精准,节省空间,存取速度慢
    字符长度范围:0-65535(如果大于21845会提示用其他类型 。mysql行最大限制为65535字节,字符编码为utf-8:https://dev.mysql.com/doc/refman/5.7/en/column-count-limit.html)
    存储:
        varchar类型存储数据的真实内容,不会用空格填充,如果'ab  ',尾部的空格也会被存起来
        强调:varchar类型会在真实数据前加1-2Bytes的前缀,该前缀用来表示真实数据的bytes字节数(1-2Bytes最大表示65535个数字,正好符合mysql对row的最大字节限制,即已经足够使用)
        如果真实的数据<255bytes则需要1Bytes的前缀(1Bytes=8bit 2**8最大表示的数字为255)
        如果真实的数据>255bytes则需要2Bytes的前缀(2Bytes=16bit 2**16最大表示的数字为65535)
    
    检索:
        尾部有空格会保存下来,在检索或者说查询时,也会正常显示包含空格在内的内容
差异详解

相关文章:

  • 2022-02-02
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-26
  • 2022-01-14
  • 2021-09-02
猜你喜欢
  • 2021-08-21
  • 2022-01-02
  • 2022-12-23
  • 2022-12-23
  • 2021-08-13
  • 2022-12-23
  • 2021-08-16
相关资源
相似解决方案