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

你可能感兴趣的:(Database)