?
本文檔使用 php中文網(wǎng)手冊 發(fā)布
按照下面的步驟將插入到一個表中的值被轉(zhuǎn)換為目的列的數(shù)據(jù)類型。
值存儲類型轉(zhuǎn)換
檢查一個與目標(biāo)的準(zhǔn)確匹配。
另外,試著轉(zhuǎn)換表達式為目標(biāo)類型格式。 如果在兩種類型之間有一個累加寄存器將會成功。 如果所表達的是一個未知類型的文字,那么該文字字符內(nèi)容為目標(biāo)格式將提供給的輸入轉(zhuǎn)換程序。
檢查是否有一個對于目標(biāo)類型大小計算標(biāo)準(zhǔn)。大小計算是一個從類型到自身的計算。 如果在系統(tǒng)表pg_cast中發(fā)現(xiàn)一個,那么在存儲到目標(biāo)列之前 將它應(yīng)用到表達式。 對于這樣的一個計算的執(zhí)行函數(shù)總用一個額外的參數(shù)類型integer,接收 目標(biāo)列的聲明長度(實際上,是它的atttypmod值;對于不同數(shù)據(jù)類型atttypmod轉(zhuǎn)變的解釋)。 該計算函數(shù)負(fù)責(zé)應(yīng)用任何從屬長度語義,例如大小檢查或截斷。
Example 10-6. character存儲類型轉(zhuǎn)換
對于一個聲明的目標(biāo)列如character(20),下面的語句確保存儲正確的值:
CREATE TABLE vv (v character(20)); INSERT INTO vv SELECT 'abc' || 'def'; SELECT v, length(v) FROM vv; v | length ----------------------+-------- abcdef | 20 (1 row)
實際發(fā)生的事情是兩個未知文字默認(rèn)為text類型,||操作符解析為text串聯(lián)。 text是操作符轉(zhuǎn)換成bpchar("blank-paddedchar",character數(shù)據(jù)類型的內(nèi)置名稱)去匹配目標(biāo)列類型。 (由于從text到bpchar的轉(zhuǎn)換是強制二進制,該轉(zhuǎn)換不會插入任何真正的函數(shù)調(diào)用。) 最后,在系統(tǒng)表中找到的大小函數(shù)bpchar(bpchar, integer)被應(yīng)用到操作符結(jié)果中和存儲列長度。 特定格式函數(shù)執(zhí)行必要的長度檢查和添加空格。