應用中避免使用char/nchar型別
定寬的儲存空間可能導致表和相關索引比平常大許多,還會伴隨著繫結變數問題,所以無論什麼場合都避免使用char型別
JEL@JEL >create table t (x char(20),y varchar2(20));
Table created.
JEL@JEL >insert into t values ('hello','hello');
1 row created.
JEL@JEL >commit;
Commit complete.
JEL@JEL >select * from t;
X Y
-------------------- --------------------
hello hello
JEL@JEL >select * from t where x='hello';
X Y
-------------------- --------------------
hello hello
JEL@JEL >select * from t where y='hello';
X Y
-------------------- --------------------
hello hello
如上查詢結果相同是因為發生了隱式轉換
x與y欄位是截然不同的
JEL@JEL >select * from t where x=y;
no rows selected
JEL@JEL >select * from t where trim(x)=y;
X Y
-------------------- --------------------
hello hello
關於繫結變數
JEL@JEL >variable v_x varchar2(20)
JEL@JEL >exec :v_x := 'hello';
PL/SQL procedure successfully completed.
JEL@JEL >select * from t where x= :v_x;
no rows selected
JEL@JEL >select * from t where y= :v_x;
X Y
-------------------- --------------------
hello hello
varchar2繫結變數不會像字串直接量那樣隱式轉換成char(20)
JEL@JEL >variable v_x char(20)
JEL@JEL >exec :v_x := 'hello';
PL/SQL procedure successfully completed.
JEL@JEL >select * from t where x= :v_x;
X Y
-------------------- --------------------
hello hello
JEL@JEL >select * from t where y= :v_x;
no rows selected
如果混合使用並匹配varchar2和char,如上問題會經常出現。
JEL@JEL >create table t (x char(20),y varchar2(20));
Table created.
JEL@JEL >insert into t values ('hello','hello');
1 row created.
JEL@JEL >commit;
Commit complete.
JEL@JEL >select * from t;
X Y
-------------------- --------------------
hello hello
JEL@JEL >select * from t where x='hello';
X Y
-------------------- --------------------
hello hello
JEL@JEL >select * from t where y='hello';
X Y
-------------------- --------------------
hello hello
如上查詢結果相同是因為發生了隱式轉換
x與y欄位是截然不同的
JEL@JEL >select * from t where x=y;
no rows selected
JEL@JEL >select * from t where trim(x)=y;
X Y
-------------------- --------------------
hello hello
關於繫結變數
JEL@JEL >variable v_x varchar2(20)
JEL@JEL >exec :v_x := 'hello';
PL/SQL procedure successfully completed.
JEL@JEL >select * from t where x= :v_x;
no rows selected
JEL@JEL >select * from t where y= :v_x;
X Y
-------------------- --------------------
hello hello
varchar2繫結變數不會像字串直接量那樣隱式轉換成char(20)
JEL@JEL >variable v_x char(20)
JEL@JEL >exec :v_x := 'hello';
PL/SQL procedure successfully completed.
JEL@JEL >select * from t where x= :v_x;
X Y
-------------------- --------------------
hello hello
JEL@JEL >select * from t where y= :v_x;
no rows selected
如果混合使用並匹配varchar2和char,如上問題會經常出現。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29337971/viewspace-1063845/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 避免使用Oracle的char型別Oracle型別
- Oracle 資料型別CHAR, NCHAR, VARCHAR2, NVARCHAR2Oracle資料型別
- MySQL中資料型別(char(n)、varchar(n)、nchar(n)、nvarchar(n)的區別)MySql資料型別
- char,nchar,varchar,nvarchar的區別和特點
- Sql server char,nchar,varchar與Nvarchar的區別SQLServer
- 聊聊Oracle 11g中的char型別使用Oracle型別
- ABAP中Char型別資料轉換成Decimal型別型別Decimal
- PL/SQL中char型別的暗門SQL型別
- NTMySQL中varchar和char型別的區別heeMySql型別
- SQL插入語句中有單引號 && SQL中char nchar varchar nvarchar的區別 && Java中字元(串)和數值型別的轉換SQLJava字元型別
- const char* 型別不能用於初始化char* 型別實體型別
- 使用 RxJs Observable 來避免 Angular 應用中的 Promise 使用JSAngularPromise
- Oracle CHAR,VARCHAR,VARCHAR2,nvarchar型別的區別與使用Oracle型別
- char型別的數值轉換型別
- VS中”LPTSTR" 型別的值不能用於初始化 "char *" 型別的實體型別
- 過程需要型別為 'ntext/nchar/nvarchar' 的引數 '@statement'型別
- 【C++】CONST CHAR*型別的值不能用於初始化CHAR*型別的實體C++型別
- 【基礎】Oracle CHAR,VARCHAR,VARCHAR2,nvarchar型別的區別與使用Oracle型別
- MySQL資料型別操作(char與varchar)MySql資料型別
- k8s中應用GlusterFS型別StorageClassK8S型別
- Redis中7種集合型別應用場景Redis型別
- 避免資料型別轉換資料型別
- MySQL中CHAR和VARCHAR區別MySql
- 談MySQL中char varchar區別MySql
- MySQL字元資料型別char與varchar的區別MySql字元資料型別
- E0144 "const char *" 型別的值不能用於初始化 "char *" 型別的實體型別
- 當char型變數遇上char*型的指標變數指標
- Java char 型別究竟佔幾個位元組?Java型別
- MySQL CHAR和VARCHAR資料型別介紹MySql資料型別
- Oracle的資料型別:char/varchar2Oracle資料型別
- TypeScript 中列舉型別的理解?應用場景?TypeScript型別
- 資料型別綜合應用資料型別
- Python工作筆記-往dll中傳入char*型別的引數並且如何接收char*的值Python筆記型別
- char nchar varchar2 nvarchar2 區別-Oracle (varchar2 max 4K, 2K漢字)Oracle
- "LPWSTR" 型別的值不能用於初始化 "char *" 型別的實體型別
- [20120222]Nchar以及nvarchar2型別型別
- Java基本型別佔用的位元組數(char佔用幾個位元組問題)Java型別
- C# - char型別的一些介紹C#型別