今天在做乙個前台查詢功能的時候,需要從資料庫中查詢一些資料,顯示在前台的jsp頁面上,然會自己就寫了乙個sql,在oralce資料庫上執行一下,看看是否能查詢出資料,結果是沒有查詢到資料,找個乙個上午的問題,終於找到了查詢不到資料的問題所在,在我寫的查詢sql中包含了乙個left join的左連線查詢,問題就出在這個左連線查詢的連線欄位上。
查詢不到資料的原因在於 連線的字段的資料型別不一樣,
乙個表的資料型別定義的為char(2);
另乙個表中關聯字段定義的資料型別為varchar2(10)
從表面上看這兩個資料型別不同的字段在做關聯查詢的時候應該不會有問題,排除了字段型別的問題,接下來就是看了一下欄位中儲存的資料的問題,經過仔細的排查對比,果然問題就出現在資料的儲存問題上,由於char型別的字段型別,在儲存資料的時候會有乙個特點,比如,定義乙個char(2)長度的資料庫字段,如果儲存到該字段中的為乙個位元組的時候,char資料型別的字段會把沒有占用的空間補上空格,如果你想在資料庫中存乙個1,則存到資料庫中的資料就會發生變化,會變成「空格1」會多出乙個空格,這樣就導致了我在做關聯查詢的時候,怎樣也查詢不到資料,由於varchar2資料型別是可變儲存,在varchar2資料型別的字段中存入1,在資料庫中實際儲存的就1,不會出現char資料型別的那個種情況,自動的補空格。
最後總結一下原因:
就是char資料型別的空格問題
以後需要注意:
以後在工作的過程中,要特別的注意一下,資料庫中欄位型別的定義,和對char型別的資料庫欄位的資料儲存問題,合理的定義和儲存char型別的資料。
oracle中的資料型別
字段型別 中文說明 限制條件 其它說明 char 固定長度字串 最大長度2000 bytes varchar2 可變長度的字串 最大長度4000 bytes 可做索引的最大長度749 nchar 根據字符集而定的固定長度字串 最大長度2000 bytes nvarchar2 根據字符集而定的可變長度...
ORACLE中的資料型別
char 固定長度字元域,最大長度可達2 000 個位元組 nchar 多位元組字符集的固定長度字元域,長度隨字符集而定,最多為2 000個字元或2 000個位元組 varchar2 可變長度字元域,最大長度可達4 000 個字元 nvarchar2 多位元組字符集的可變長度字元域,長度隨字符集而定...
Oracle中的資料型別
oracle 8 資料型別 資料型別 引數描述 char n n 1 to 2000位元組 定長字串,n位元組長,如果不指定長度,預設為1個位元組長 乙個漢字為2位元組 varchar2 n n 1 to 4000位元組 可變長的字串,具體定義時指明最大長度n,這種資料型別可以放數字 字母以及asc...