Mysql
mysql。欄位的預設長度
是否有一些常見欄位的已設置標準列表,例如:名字、姓氏、電子郵件、電話?
我看到大多數人只是將 varchar(300) 設置為所有欄位,它會以任何方式影響性能嗎?
建議的最大長度
首先,我將提到一些常見的字元串,它們總是十六進制的,或者僅限於 ASCII。對於這些,您應該指定
CHARACTER SET ascii
(latin1
is ok) 以免浪費空間:UUID CHAR(36) CHARACTER SET ascii -- or pack into BINARY(16) country_code CHAR(2) CHARACTER SET ascii ip_address CHAR(39) CHARACTER SET ascii -- or pack into BINARY(16) phone VARCHAR(20) CHARACTER SET ascii -- probably enough to handle extension postal_code VARCHAR(20) CHARACTER SET ascii -- (not 'zip_code') (don't know the max city VARCHAR(100) -- This Russian town needs 91: Poselok Uchebnogo Khozyaystva Srednego Professionalno-Tekhnicheskoye Uchilishche Nomer Odin country VARCHAR(50) -- probably enough name VARCHAR(64) -- probably adequate; more than some government agencies allow
為什麼不簡單地 255? 有兩個原因可以避免對所有事情都使用 (255) 的常見做法。
- 當一個複合體
SELECT
需要創建臨時表時(對於子查詢、、、UNION
等GROUP BY
),首選是使用MEMORY
引擎,它將數據放在 RAM 中。但在過程VARCHARs
中變成CHAR
了。這VARCHAR(255) CHARACTER SET utf8mb4
需要 1020 個字節。這可能導致需要溢出到磁碟,這會更慢。- 在某些情況下,InnoDB 將查看表中列的潛在大小並確定它太大,中止
CREATE TABLE
.