mysql的CHAR和VARCHAR类型

2023-12-13 03:55:49

MySQL :: MySQL 8.2 Reference Manual :: 11.3.2 The CHAR and VARCHAR Types

  • CHAR和VARCHAR两个数据类型类似,但在存储和取回方面不同、最大长度不同、结尾的空格是否保留方面不同。
  • 一个列声明为CHAR、或者VARCHAR类型,要指明一个长度,这个长度就是该字段能够保存的最大字符的数量。例如,CHAR(30)表示字段最多能保存30个字符。
  • CHAR列的长度是固定的,就等于创建表时对该字段声明的长度,可以声明长度的范围是0到255。当保存CHAR值的时候,会在右边填充空格使总长度达到声明的长度。当取回CHAR的值时,会去掉后面的空格,除非使用了PAD_CHAR_TO_FULL_LENGTH模式(不过这个模式已经废弃,会在将来的某个版本去掉)。
  • VARCHAR列是变长字符串。可以声明的长度是0到65535。与CHAR列不同,VARCHAR列用1个字节、或者2个字节的长度前缀+数据来保存。如果数据保存需要的字节数小于255,那么只用1个字节的长度前缀;如果数据保存需要的字节数大于255,那么要用2个字节的长度前缀。即便数据长度小于声明的字段长度,VARCHAR的值当存储的时候不额外用空格填充。如果数据本身后面有空格,存储和取回的时候空格都保留。

示例:下表通过各种值存入CHAR(4)、VARCHAR(4)列演示了它们的区别。假设列用了单字节字符集,例如latin1:

要存入的值CHAR(4)列保存的值CHAR(4)存储需要的字节数VARCHAR(4)列保存的值VARCHAR(4)存储需要的字节数
'''????'4 bytes''1 byte
'ab''ab??'4 bytes'ab'3 bytes
'abcd''abcd'4 bytes'abcd'5 bytes
'abcdefgh''abcd'4 bytes'abcd'5 bytes

备注:在上面表中最后一行的示例中,只有当没有使用严格SQL模式的时候才适应。如果使用了严格SQL模式,当值的长度超过列声明的长度,不会被存储,而会发生一个错误。

文章来源:https://blog.csdn.net/panghuangang/article/details/134913967
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。