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