<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 8.13\. XML 類型 `xml`數據類型可以用于存儲XML數據。 將XML數據存到`text`類型中的優勢在于它能夠為結構良好性來檢查輸入值, 并且還支持函數對其進行類型安全性檢查,可參閱[Section 9.14](#calibre_link-1459)。 要使用這個數據類型,編譯時必須使用`configure --with-libxml`。 `xml`可以存儲由XML標準定義的格式良好的"文檔", 以及由XML標準中的`XMLDecl? content`定義的"內容"片段, 大致上,這意味著內容片段可以有多個頂級元素或字符節點。 `_xmlvalue_` IS DOCUMENT 表達式可以用來判斷一個特定的`xml`值是一個完整的文件還是內容片段。 ## 8.13.1\. 創建XML值 使用函數`xmlparse`: 來從字符數據產生`xml`類型的值: ``` XMLPARSE ( { DOCUMENT | CONTENT } _value_) ``` 例子: ``` XMLPARSE (DOCUMENT '<?xml version="1.0"?><book><title>Manual</title><chapter>...</chapter></book>') XMLPARSE (CONTENT 'abc<foo>bar</foo><bar>foo</bar>') ``` 然而根據SQL標準,這是唯一的用于將字符串轉換成XML值的方式,PostgreSQL特有的語法也可以使用: ``` xml '<foo>bar</foo>' '<foo>bar</foo>'::xml ``` `xml`類型對一個文檔類型聲明(DTD)不會驗證輸入值, 即使輸入值聲明了一個DTD。目前沒有內置支持用于對其他XML架構語言(如XML Schema)驗證。 使用函數`xmlserialize`: 來從`xml`產生一個字符串。 ``` XMLSERIALIZE ( { DOCUMENT | CONTENT } _value_ AS _type_ ) ``` `_type_`可以是`character`,`character varying` 或`text`(或其中某個的變種)。同時,根據SQL標準, 這是`xml`和字符類型之間的唯一的轉換方式,但PostgreSQL仍支持簡單的值轉換。 當一個字符串值在沒有通過`XMLPARSE`或`XMLSERIALIZE`的情況下, 與`xml`類型進行轉換時,分別的,選擇`DOCUMENT`與`CONTENT` 是由"XML option" 會話配置參數決定,這個配置參數可以由標準命令來設置: ``` SET XML OPTION { DOCUMENT | CONTENT }; ``` 或更多類似的PostgreSQL語法: ``` SET xmloption TO { DOCUMENT | CONTENT }; ``` 默認是`CONTENT`,因此所有的XML數據格式都能支持。 > **Note:** 隨著默認XML選項的設置,如果字符串中包含一個文檔類型聲明, 那么你不能直接將其轉換成`xml`類型,因為XML內容片斷的定義不支持。 如果非得需要這么做,要么使用`XMLPARSE`,要么更改XML選項。 ## 8.13.2\. 編碼處理 在對客戶端和服務器端進行多字符編碼,以及在通過它們傳遞XML數據時需要格外注意。 當使用文本模式(正常模式)在服務器端和客戶端之間傳遞查詢和查詢結果時, PostgreSQL在各自終端對所有傳遞的字符數據和字符編碼進行相互轉換,參閱[Section 22.3](#calibre_link-1272)。 這包括XML值的字符串表示形式,如上面的例子。這通常意味著XML數據中的編碼聲明, 在客戶端和服務器之間傳遞時,可以成為無效字符數據轉換為其他編碼。 這是因為枚舉編碼聲明沒有改變。為了應對該問題, 提交輸入到`xml` 類型的字符串中的編碼聲明會被_ignored_, 同時,內容會被認為是在當前服務器編碼中。所以,對正確的處理來說, XML數據的字符串必須從在當前客戶端編碼中的客戶端發送。客戶端有責任, 要么在傳遞到服務器之前將文檔轉換成當前客戶端編碼,要么適當的調整客戶端編碼。 輸出時,`xml`類型的值不會有編碼聲明, 同時客戶端會認為所有的數據都是在當前客戶端編碼之中的。 當使用二進制模式在服務器和客戶端之間傳遞查詢參數和查詢結果,沒有執行字符集轉換, 因此解決方法是不同的。在這種情況下,將會遵守XML數據中的編碼聲明, 并且如果聲明不存在,數據會被假定為UTF-8格式(如同XML標準要求那樣, 但需要注意的是PostgreSQL不支持UTF-16)。輸出時,會對數據進行編碼聲明以指定客戶端編碼, 除非客戶端編碼格式是UTF-8。 不用說,如果XML數據編碼格式,客戶端編碼格式,以及服務器編碼格式都一樣, 那么用PostgreSQL處理XML數據將會減少錯誤,并且效率會很高。在內部, XML數據是用UTF-8編碼格式處理的,因此,如果服務器端編碼也是UTF-8時,計算性能會很高。 | **Caution** | |:--- | | 當服務器編碼非UTF-8格式時,一些XML相關的函數可能完全不支持非ASCII數據, 特別是`xpath()` 函數。 | ## 8.13.3\. 訪問XML值 `xml`數據類型有些特殊,因為它不提供比較運算符。這是因為對XML數據, 沒有很好的定義和通用的比較運算符。這樣做的一個后果是, 不能通過`xml`與檢索值的比較來檢索行。因此XML值必須帶有一個單獨的關鍵值, 如一個ID。另一個解決比較XML值的方法是,先將它們轉換成字符串, 但需要注意的是字符串比較與一個有用的XML比較方法無關。 因為沒有針對`xml`數據類型的比較運算符,因此不能在這種類型的字段上直接創建索引。 如果需要對XML數據進行快速搜索,可能的解決方法包括將表達式轉換成一個字符串類型, 然后對它進行索引,或索引一個XPath表達式。當然,實際查詢是不得不進行調整, 以使用一個索引表達式進行檢索。 PostgreSQL中的文本檢索功能也可用于加快XML數據的全文搜索。 但必要的預處理支持在PostgreSQL中還不能獲得。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看