SQL> conn test/testITPUB个人空间 s/Sa_Z"?
已连接。ITPUB个人空间)W[k1u,IB
SQL> create table t1 (a char(20),b varchar2(20),c varchar2(20 char));
表已创建。
SQL> insert into t1 values('abc','abc','abc');
已创建 1 行。
SQL> select * from t1 where a='abc';
/a Hf-U,k'}"`Ow.BX7590422A B C
\r1]9G"Z~5C'v7590422------ ---------- -------
H/v(e9lU7590422abc abc abcITPUB个人空间)t&N!VnguP }vm0e
ITPUB个人空间BH7T2ne
bo
SQL> set linesize 200
U \|1uA p7590422SQL> select * from t1 where b='abc';
t*WS G&b
Gt5Y3x7590422A B C ITPUB个人空间
Qu[X6L|
------- -------- ---------- ITPUB个人空间IA Y7A9^D![
abc abc abc
SQL> select * from t1 where a=b;
未选定行
SQL> select * from t1 where b=c;ITPUB个人空间5GQd'fd)N!m(Q
A B C
4Qo'l+Ec
}2HI!s7590422------- --------- ----------
x*|Kk&}P T7590422abc abc abc
SQL> var str varchar2(20);ITPUB个人空间_s.P%EMh
SQL> exec :str :='abc';
PL/SQL 过程已成功完成。
SQL> select * from t1 where a = :str;
未选定行
SQL> select * from t1 where b= :str;
A B CITPUB个人空间&X_7`
K,^x#J
------- -------- ---------
c|!No"y)\r7590422abc abc abc
SQL> insert into t1 values('中化人民广播电台','中化人民广播电台','中化人民广播电台');
已创建 1 行。
SQL> insert into t1 values('中化人民广播电台体育频道','中化人民广播电台体育频道','中化人民广播电台体育频道');
'Cc(r!s!a5L^DFc7590422insert into t1 values('中化人民广播电台体育频道','中化人民广播电台体育频道','中化人民广播电台体育频道')
eS6g!Ep"iY.mpI&L7590422 *ITPUB个人空间rCeX,]b2wK}p
第 1 行出现错误:
r6ql3L0j5{s }7590422ORA-12899: 列 "TEST"."T1"."A" 的值太大 (实际值: 24, 最大值: 20)
SQL> insert into t1 values('中化人民广播电台体','中化人民广播电台体育频道','中化人民广播电台体育频道');ITPUB个人空间4Efqxt
insert into t1 values('中化人民广播电台体','中化人民广播电台体育频道','中化人民广播电台体育频道')ITPUB个人空间%c&}-jS4Fi5h4M
q(h q
*
O7x]BD+i:J}!N&B7590422第 1 行出现错误:ITPUB个人空间F!Z[/rr9h
ORA-12899: 列 "TEST"."T1"."B" 的值太大 (实际值: 24, 最大值: 20)
SQL> insert into t1 values('中化人民广播电台体','中化人民广播电台体','中化人民广播电台体育频道');
已创建 1 行。
这个故事告诉我们三个道理:
1。char是变长字符串,在insert的时候如果你插入的值长度比字段定义的长度短,oracle会以空格补足。当你用where a='abc'这种普通方式查询的时候,oracle会在等号两边做trim然后再比较。如果你绑定变量查询,oracle则不做trim.ITPUB个人空间+JI4eC!f/m
varchar2是变长字符串,在insert的时候如果你插入的值长度比字段定义的长度短,oracle不会补足。所以绑定变量查询与普通查询完全一样。
2。字符串定义有两种可选方式:varchar2(20 byte)或varchar2(20 char).byte代表在数据库中实际占多少字节。char代表实际存储了多少字符。如果使用varchar2(20 char)这种方式来定义字符串,根据数据库字符集的不同,在数据库中存储的长度也不同。比如在zhs16gbk的数据库中,如果使用varchar2(20 char)来定义字符串,则实际能存储20个字符,占40个字节。
3。这个故事还告诉我们:实践出真知。