執行以下建表語句時,MySQL 拋出語法錯誤:
CREATE TABLE posts (
post_id int(8) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY(post_id),
post_user_id int(8) unsigned,
post_date int(10) unsigned,
post_url varchar(100),
post_title varchar(100),
post_end_date int(10) unsigned,
post_slogan varchar(10),
post_content varchar,
post_status char(1)
);
倒數第二個字段 post_content varchar 未指定長度。MySQL 規定 VARCHAR 類型必須顯式聲明最大字符數,如 VARCHAR(255) 或 VARCHAR(1000)。
為該字段補全長度,根據業務需求合理設置:
post_content varchar(1000), -- 或 varchar(5000) 等
VARCHAR、CHAR、DECIMAL 等需長度的類型,建表時必須顯式指定。SHOW CREATE TABLE 或圖形化工具導出 DDL 時,仔細核對每個字段定義。sql_mode=STRICT_TRANS_TABLES,讓語法錯誤儘早暴露。實際存儲長度 = 字符數 + 1~2 字節長度前綴。VARCHAR(255) 以內用 1 字節前綴,超過則用 2 字節。建議根據業務最大長度預留 20% 冗餘,避免頻繁 ALTER TABLE 擴容導致鎖表。