在某些情況下,MySQL 會靜默地變更 CREATE TABLE
或 ALTER TABLE
陳述式中給定的欄位規格。這些變更可能是資料類型、與資料類型關聯的屬性或索引規格的變更。
所有變更都受限於 65,535 位元組的內部列大小限制,這可能會導致某些嘗試變更資料類型的操作失敗。請參閱 第 10.4.7 節,「資料表欄位計數和列大小的限制」。
屬於
PRIMARY KEY
的欄位會設為NOT NULL
,即使沒有這樣宣告。MySQL 會將其他 SQL 資料庫供應商使用的某些資料類型對應到 MySQL 的類型。請參閱第 13.9 節,「使用其他資料庫引擎的資料類型」。
如果您包含
USING
子句來指定特定儲存引擎不允許的索引類型,但有另一種引擎可用的索引類型,且不會影響查詢結果,則引擎會使用可用的類型。如果未啟用嚴格 SQL 模式,長度規格大於 65535 的
VARCHAR
資料行會轉換為TEXT
,而長度規格大於 65535 的VARBINARY
資料行會轉換為BLOB
。否則,在這些情況下會發生錯誤。為字元資料類型指定
CHARACTER SET binary
屬性會導致將該資料行建立為對應的二進位資料類型:CHAR
變成BINARY
、VARCHAR
變成VARBINARY
,而TEXT
變成BLOB
。對於ENUM
和SET
資料類型,則不會發生這種情況;它們會按照宣告的方式建立。假設您使用以下定義指定表格CREATE TABLE t ( c1 VARCHAR(10) CHARACTER SET binary, c2 TEXT CHARACTER SET binary, c3 ENUM('a','b','c') CHARACTER SET binary );
產生的表格具有以下定義
CREATE TABLE t ( c1 VARBINARY(10), c2 BLOB, c3 ENUM('a','b','c') CHARACTER SET binary );
若要查看 MySQL 是否使用了您指定的資料類型以外的類型,請在建立或變更表格後,發出 DESCRIBE
或 SHOW CREATE TABLE
陳述式。
如果您使用 myisampack 壓縮表格,則可能會發生某些其他資料類型變更。請參閱第 18.2.3.3 節,「壓縮表格的特性」。