MySQL 和 PostgreSQL 字符串類型比較

1. MySQL:

    1.1 CHAR(n)

        1.1. 存儲固定長度(n)的字符串。n 範圍是 [0, 255]。n 的缺省值爲 1.

        1.2. 當插入的字符串長度小於 n 時,MySQL 會在末尾補充空格。查詢的時候,MySQL 會刪除末尾的空格(不會刪除頭部空格)。

        1.3. MySQL 在處理 >、 >=、 <、 <=、 =、 LIKE 這樣的操作符時,不會考慮末尾的空格。

    1.2. VARCHAR(n)

        1.2.1. n 不可以省略。

        1.2.2. VARCHAR 類型的 column 最大佔用空間是 65535 Byte。

        1.2.3. MySQL 會在字符串前面加 1 或 2 個字節的前綴,這個前綴是用來保存這 column 的長度的。當 column 暫用空間小於 255 時,前綴暫用一個字節,否則暫用兩個字節。

            1.2.3.1. 當 column 不可以爲空(not null)時,所保存的字符串最長是 (65535 - 2 = 65533) Byte。
            1.2.3.2. 當 column 可以爲空時,所保存的字符串最長是 (65535 - 2 - 1 = 65533) Byte。額外的 1 字節存放 null。[1]

        1.2.4. 不能設置多列爲 VARCHAR(635532),因爲 MySQL 有限制(max row size)。

        1.2.5. 如果插入的字符串長度大於 n ,就會報錯,插不進去。[2]

        1.2.6. 插入字符串時候,不會填充空格,也不會刪除空格。(特例:如果包含空格會長度大於 n,刪除末尾的空格就不大於 n 的時候,MySQL 會刪除末尾的空格。[2])

    1.3. TEXT

        1.3.1. 與 VARCHAR 不同,TEXT 不會保存字符串的長度。

        1.3.2. 不會添加 / 刪除空格。

        1.3.4. 不會保存在內存裏,所以讀取的時候需要額外的開銷。在 SELECT 查詢中,TEXT 性能較低。

        1.3.5. TEXT 有 4 種類型,空間從 256 B 到 4 GB:

            1.3.5.1. TINYTEXT:        255 characters                  - 255 B
            1.3.5.1. TEXT:                65,535 characters             - 64 KB
            1.3.5.1. MEDIUMTEXT: 16,777,215                        - 16 MB
            1.3.5.1. LONGTEXT:      4,294,967,295 characters - 4 GB

    1.4. BLOB

        1.4.1. BLOB 主要用於存儲二進制數據,比如圖片、視頻、可執行文件。

 

2. PoregreSQL 與 MySQL 不同的地方:

    2.1. 對於 VARCHAR,PostgreSQL 如果不指定 n,就和 TEXT 一樣。(MySQL 不指定 n 會報錯)

    2.2. 對於 TEXT, PostgreSQL 是沒有長度限制的。(MySQL 有4 種類型的 TEXT)

    2.3. 更多對比,可以參考 MySQL 官網。[5]

 

 

 

 

 

參考:

1. https://stackoverflow.com/questions/8295131/best-practices-for-sql-varchar-column-length

2. http://www.mysqltutorial.org/mysql-varchar/

3. https://chartio.com/resources/tutorials/understanding-strorage-sizes-for-mysql-text-data-types/

4. http://www.postgresqltutorial.com/postgresql-char-varchar-text/

5. https://dev.mysql.com/doc/workbench/en/wb-migration-database-postgresql-typemapping.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章