首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

MySQL 用戶名字段選 CHAR 還是 VARCHAR?長度不足自動填充會影響查詢嗎?

     編輯:程式設計綜合問答

直接回答

推薦 VARCHAR(30)。CHAR(30) 會右側填充空格至固定長度,存儲、索引、網絡傳輸均佔用 30 字節,浪費空間且 WHERE name = 'abc' 需注意尾部空格匹配(MySQL 默認 PAD_CHAR_TO_FULL_LENGTH 影響比較語義)。

CHAR vs VARCHAR 核心差異

特性CHAR(n)VARCHAR(n)
存儲固定 n 字節,右填充空格實際長度 + 1~2 字節長度前綴
索引大小固定 n可變,通常更小
尾部空格自動填充,比較時可能被忽略/保留保留用戶輸入的空格
適用場景固定長度代碼(MD5、UUID、郵編、身份證)變長文本(用戶名、郵箱、地址)

阿里云 RDS 限制長度原因

可能觸發 ROW_SIZE_TOO_LARGE 或 INNODB_LIMIT,單行超過 8KB 或字段數超限。檢查表結構:

SHOW CREATE TABLE your_table;
-- 若有多個 CHAR(255) 或 TEXT/BLOB 導致行溢出,改為 VARCHAR 或調整頁面大小。

查詢會不會因填充空格失敗?

不會。MySQL 默認 sql_mode 不包含 PAD_CHAR_TO_FULL_LENGTH,CHAR 列比較時會忽略尾部空格。但為避免歧義,統一用 VARCHAR 並應用層 trim() 存儲。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved