# 定长和变长字符串

__*CHAR 数据类型*__

__*VARCHAR 数据类型*__

+ 数据类型:
  + `CHAR`: 固定长度字符串
  + `VARCHAR`: 可变长度字符串
+ `CHAR` 示例:
  + `language_code CHAR(2)`
+ `VARCHAR` 示例:
  + `planet_name VARCHAR(45)`
------------------------------------------------------------
CHAR 是一个固定长度的字符串。以 CHAR 形式存储的值在右侧填充指定长度的空格。M 表示以字符为单位的列长度（不是字节）。M 的范围是 0 到 255。
VARCHAR 是一个长度可变的字符串。M 以字符（不是字节）表示最大列长度。VARCHAR 的最大大小不能超过 65,535 字节。最大行长和使用的字符集决定了 VARCHAR 的长度。

- CHAR 类型
  - 定长字符串。CHAR 列的长度固定为创建表时声明的长度。当保存 CHAR 值时,不足固定长度的字符串在后面填充空格,以达到指定的长度。M 表示列长度（字符的个数,不是字节的个数）。长度可以为从 0 到 255 的任何值。
`[NATIONAL] CHAR[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]`

- VARCHAR 类型
  - 变长字符串。M 表示最大列长度（字符的最大个数）。VARCHAR 的空间占用大小不得超过 65535 字节。在选择 VARCHAR 长度时,应当根据最长的行的大小和使用的字符集确定。
  - 对于不同的字符集,单个字符所占用的空间可能有所不同。以下表格是各个字符集下单个字符占用的字节数,以及 VARCHAR 列长度的取值范围:

字符集	单个字符字节数	VARCHAR 最大列长度的取值范围
ascii	      1	                (0, 65535]
latin1	    1	                (0, 65535]
binary	    1	                (0, 65535]
utf8	      3	                (0, 21845]
utf8mb4	    4	                (0, 16383]

`[NATIONAL] VARCHAR(M) [CHARACTER SET charset_name] [COLLATE collation_name]`
