在公司,提取数据时基本不需要关注数据的类型(也有少许的例外,入之前所说的select a, b, concat_ws(',' , collect_set(cast(c as string))))中,cast(age as string ) 将int类型的数据转化为了String类型。)。但当你自己在家建表是,这个问题还是需要了解了解的,今天先对比char与varchar
char和varchar代表了字符串类型的两类:固定长度的字符类型,自动变化长度的字符类型
1.固定长度的字符类型,换句话说就是定义了一个字符长度,如果你存储的字节长度不足时,系统会自动给你用“0”进行占位操作,当字符类型的长度超过我们预定义的长度时,就会报错。用char(#number[最多存储255个字符])关键字来定义。(也就是说,char(255),就表示你每个字符串存储的长度应该是255,比如你的单个字符串长度是10,那么还有245个空位系统自动会用“0”进行占位。也就没有字符存储的大小是一致的。)
2.自动变化长度的字符类型,即varchar(#bumber[最多存储65535个字符,即2个字节])。和上面的char(#number)用法相似,只不过唯一不同的是存储的字符的长度是可变化的。也就是说,varchar(10),就表示你每个字符串的长度应该是10,如果你的单个字符串长度是6,那么它就会以6个长度来存取的你的数据,而不会去可以给你填满其他的占位符,它是以你实际长度为准的。
固定和不固定都有其好处和坏处:
Varchar的优点是自动变化优点是它可以减少磁盘的空间。这在建立数据库中是一个很重要的指标。但凡事不是绝对的,其在提升性能的同 时,往往也会产生一些副作用。因为其长度是可变的,为此在数据进行更新时可能会导致一些额外的工作。例如在更改前,其字符长度是10位(Varchar规 定的最长字符数假设是50位),此时系统就只给其分配10个存储的位置(假设不考虑系统自身的开销)。更改后,其数据量达到了20位。由于没有超过最大 50位的限制,为此数据库还是允许其存储的。只是其原先的存储位置已经无法满足其存储的需求。此时系统就需要进行额外的操作。如根据存储引擎不同,有的会 采用拆分机制,而有的则会采用分页机制。
char也有优点,char类型的字符串检索速度要比varchar类型的快,但缺点也很明显那就是浪费磁盘空间。
在选择上一般我们使用时用Varchar的多,但char也有我们用得到的时候,否则就不会造它出来了,根据项目合理选择才是真正的关键
char、varchar常用的属性修饰符:
A>.NOT NULL(非空约束)
B>.NULL(允许为空)
C>.default ‘string’(默认值)
D>.CHARACTER SET 字符集
mysql>show variables like '%char%'; #查看默认的字符集
mysql>show character set; #查看数据库支持的字符集
E>.collation '规则':排序规则
msyql>show collation; #查看数据库支持的排序规则
网友评论