在某些情況下,MySQL 會靜默地變更欄位規格,使其與 CREATE TABLE
或 ALTER TABLE
陳述式中給定的規格不同。這些變更可能是資料類型、與資料類型關聯的屬性或索引規格的變更。
所有變更都受限於內部列大小限制 65,535 個位元組,這可能會導致某些資料類型變更嘗試失敗。請參閱第 10.4.7 節「表格欄位計數和列大小限制」。
屬於
PRIMARY KEY
的欄位,即使未宣告為NOT NULL
,也會被設為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 節「壓縮表格特性」。