在数据库中,CHAR
和 VARCHAR
是两种用于存储字符串的数据类型,它们之间有以下区别:
-
存储方式:
CHAR
:固定长度的字符类型。它会在存储数据时,将字符串填充到指定长度,并在末尾补足空格字符,以保证达到指定长度。VARCHAR
:可变长度的字符类型。它会根据存储的实际数据长度来分配存储空间,不会浪费额外的空间用于填充。char
最大长度是255字符,varchar
最大长度是65535个字节。
-
存储空间:
CHAR
:由于存储的是固定长度的字符串,所以它的存储空间是固定的。例如,如果定义一个长度为 10 的CHAR
字段,那么无论实际存储的字符串长度是多少,它都会占用 10 个字符的存储空间。VARCHAR
:存储的实际数据长度会影响它所占用的存储空间。例如,如果定义一个长度为 10 的VARCHAR
字段,而实际存储的字符串长度只有 5 个字符,那么它只会占用 5 个字符的存储空间,而不会浪费额外的空间。
-
性能和存取:
- 由于
CHAR
类型的数据是固定长度的,因此在存取时速度可能会比较快,特别是当存储的字符串长度固定且较长时。 VARCHAR
类型的数据由于存储的是实际长度,因此在存取时可能会稍慢一些,特别是当存储的字符串长度不固定或者变化较大时。
- 由于
- 适用场景:
CHAR
适合存储长度固定的字符串,例如性别、国家代码等。VARCHAR
适合存储长度不固定的字符串,例如姓名、地址等。- 存储很短的信息,比如门牌号码101,201……这样很短的信息应该用
char
,因为varchar还要占1个byte用于存储信息长度,本来打算节约存储的现在得不偿失。 - 固定长度的。比如使用
uuid作为主键
,那用char
应该更合适。因为他固定长度,varchar动态根据长度的特性就消失了,而且还要占1个长度信息。 - 十分频繁改变的column。因为varchar每次存储都要有额外的计算,得到长度等工作,如果一个非常频繁改变的,那就要有很多的精力用于计算,而这些对于char来说是不需要的。
总的来说,如果你知道数据的长度是固定的,可以考虑使用 CHAR
类型;如果数据的长度是不确定的或者变化较大,可以考虑使用 VARCHAR
类型。