例子,在建表语句中使用char与varchar2字段类型。
下面通过实例测试,来看下char与varchar2的区别。
1)、length长度区别
从这可以看到显著的区别,虽然插入的是三个字符,但是char(n)类型还是会填写剩余的固定的内容,而varchar2不会.
2)、过程测试与自动转换问题
? 为什么结果没有发生变化了? 只能说是没有匹配条件的记录.
看来应该是这样的,如果变量定义为varchar2,那么最终长度决定了实际的长度,这里是3,但是对于表格userinfo2来说它不存在值为'001'的user_id.数据库中的实际存在的是"001."
,所以上面的语句实际上等同于:update userinfo2 set user_name='goood' where user_id='001',这样自然无法找到匹配记录.
但是如果你用的是常量,那么oracle或者某些程序会自动的把它们转换为char类型.
3)、char的自动转换
以上语句是在pl/sql developer上执行的,在sqlplus上执行也是一样的.
所以oracle sql引擎会把常量自动的理解为目标字段的类型来处理的,对于任何类型应该都是一样的.
反过来一个过程执行
结果是会得到正确的修改,应为在这个例子中恰巧user_code存在长度为3的,如果把v_code定义为char(n) n>3,那么结果还是不会变化,因为没有匹配的条件存在.
4)、一些专用于varchar2的函数的说明
当我们定义了某个字段的类型为varchar2(n)的时候,主要是为了处理中文字符集,这个时候必须有一些专门的函数来处理其中的字符.
4.1 substrb
4.2 instrb
5)、总结
4.1) 使用场合
一般情况下不要用char(n)来作为字段类型,这样可能在编写过程时要比较小心一些。
而且会占用多余的空间,所以,建议多数场合用varchar2。
4.2) 速度和效率
char是定长的,oracle处理这种类型可以花费更少的时间,如果用于存储一些不变长度的信息,其实十分的合适,例如empid,user_id,id之类的东西.
如果系统不大,并发要求不高,则什么类型都不是很关键.
对于用什么类型存储什么数据还是很讲究的,大家可以深入研究下。