Mysql

mysql。欄位的預設長度

  • July 25, 2016

是否有一些常見欄位的已設置標準列表,例如:名字、姓氏、電子郵件、電話?

我看到大多數人只是將 varchar(300) 設置為所有欄位,它會以任何方式影響性能嗎?

建議的最大長度

首先,我將提到一些常見的字元串,它們總是十六進制的,或者僅限於 ASCII。對於這些,您應該指定CHARACTER SET ascii( latin1is 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需要創建臨時表時(對於子查詢、、、UNIONGROUP BY),首選是使用MEMORY引擎,它將數據放在 RAM 中。但在過程VARCHARs中變成CHAR了。這VARCHAR(255) CHARACTER SET utf8mb4需要 1020 個字節。這可能導致需要溢出到磁碟,這會更慢。
  • 在某些情況下,InnoDB 將查看表中列的潛在大小並確定它太大,中止CREATE TABLE.

引用自:https://dba.stackexchange.com/questions/144877