<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 8.3\. 字符類型 **Table 8-4\. 字符類型** | 名字 | 描述 | | --- | --- | | `character varying(``_n_`), `varchar(``_n_`) | 變長,有長度限制 | | `character(``_n_`), `char(``_n_`) | 定長,不足補空白 | | `text` | 變長,無長度限制 | [Table 8-4](#calibre_link-2282)顯示了在PostgreSQL 里可用于一般用途的字符類型。 SQL定義了兩種基本的字符類型:`character varying(``_n_`) 和`character(``_n_`),這里的`_n_` 是一個正整數。兩種類型都可以存儲最多`_n_`個字符的字符串(沒有字節)。 試圖存儲更長的字符串到這些類型的字段里會產生一個錯誤, 除非超出長度的字符都是空白,這種情況下該字符串將被截斷為最大長度。 這個看上去有點怪異的例外是SQL標準要求的。 如果要存儲的字符串比聲明的長度短,類型為`character`的數值將會用空白填滿; 而類型為`character varying`的數值將只是存儲短些的字符串。 如果我們明確地把一個數值轉換成`character varying(``_n_`) 或`character(``_n_`),那么超長的數值將被截斷成`_n_` 個字符,且不會拋出錯誤。這也是SQL標準的要求。 `varchar(``_n_`)和`char(``_n_`) 分別是`character varying(``_n_`) 和`character(``_n_`)的別名, 沒有聲明長度的`character`等于`character(1)`; 如果不帶長度說明詞使用`character varying`, 那么該類型接受任何長度的字符串。后者是PostgreSQL的擴展。 另外,PostgreSQL提供`text`類型, 它可以存儲任何長度的字符串。盡管類型`text`不是SQL 標準,但是許多其它SQL數據庫系統也有它。 `character`類型的數值物理上都用空白填充到指定的長度`_n_`, 并且以這種方式存儲和顯示。不過,填充的空白是無語意的。在比較兩個`character` 值的時候,填充的空白都不會被關注,在轉換成其它字符串類型的時候, `character`值里面的空白會被刪除。請注意, 在`character varying`和`text`數值里,結尾的空白是_有語意_的。 并且當使用模式匹配時,如`LIKE`,使用正則表達式。 一個簡短的字符串(最多126個字節)的存儲要求是1個字節加上實際的字符串, 其中包括空格填充的`character`。更長的字符串有4個字節的開銷, 而不是1。長的字符串將會自動被系統壓縮,因此在磁盤上的物理需求可能會更少些。 更長的數值也會存儲在后臺表里面,這樣它們就不會干擾對短字段值的快速訪問。 不管怎樣,允許存儲的最長字符串大概是1GB 。允許在數據類型聲明中出現的`_n_` 的最大值比這還小。修改這個行為沒有什么意義,因為在多字節編碼下字符和字節的數目可能差別很大。 如果你想存儲沒有特定上限的長字符串,那么使用`text` 或沒有長度聲明的`character varying`,而不要選擇一個任意長度限制。 > **Tip:** 這三種類型之間沒有性能差別,除了當使用填充空白類型時的增加存儲空間, 和當存儲長度約束的列時一些檢查存入時長度的額外的CPU周期。 雖然在某些其它的數據庫系統里,`character(``_n_`) 有一定的性能優勢,但在PostgreSQL里沒有。 事實上,`character(``_n_`)通常是這三個中最慢的, 因為額外存儲成本。在大多數情況下,應該使用`text` 或`character varying`。 請參考[Section 4.1.2.1](#calibre_link-969)獲取關于字符串文本的語法的信息, 以及[Chapter 9](#calibre_link-455)獲取關于可用操作符和函數的信息。 數據庫的字符集決定用于存儲文本值的字符集;有關字符集支持的更多信息, 請參考[Section 22.3](#calibre_link-1272)。 **Example 8-1\. 使用字符類型** ``` CREATE TABLE test1 (a character(4)); INSERT INTO test1 VALUES ('ok'); SELECT a, char_length(a) FROM test1; -- <a name="CO.DATATYPE-CHAR">**(1)**</a> <samp class="literal">a | char_length ------+------------- ok | 2</samp> CREATE TABLE test2 (b varchar(5)); INSERT INTO test2 VALUES ('ok'); INSERT INTO test2 VALUES ('good '); INSERT INTO test2 VALUES ('too long'); <samp class="literal">ERROR: value too long for type character varying(5)</samp> INSERT INTO test2 VALUES ('too long'::varchar(5)); -- 明確截斷 SELECT b, char_length(b) FROM test2; <samp class="literal">b | char_length -------+------------- ok | 2 good | 5 too l | 5</samp> ``` [**(1)**](#calibre_link-2283) `char_length`函數在[Section 9.4](#calibre_link-1578)中討論。 在PostgreSQL里另外還有兩種定長字符類型。 在[Table 8-5](#calibre_link-2284)里顯示。`name` 類型_只_用于在內部系統表中存儲標識符并且不是給一般用戶使用的。 該類型長度當前定為 64 字節(63 可用字符加結束符)但應該使用`C`源碼中的常量 `NAMEDATALEN`引用。這個長度是在編譯的時候設置的, 因而可以為特殊用途調整,缺省的最大長度在以后的版本可能會改變。 類型`"char"`(注意引號)和`char(1)`是不一樣的, 它只用了一個字節的存儲空間。它在系統內部用于系統表當做過分簡單化的枚舉類型用。 **Table 8-5\. 特殊字符類型** | 名字 | 存儲空間 | 描述 | | --- | --- | --- | | `"char"` | 1 字節 | 單字節內部類型 | | `name` | 64 字節 | 用于對象名的內部類型 |
                  <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>

                              哎呀哎呀视频在线观看