為什麼我們不應該將數字儲存到 MySQL ENUM 列中?


MySQL 在內部將 ENUM 值儲存為整數鍵(索引號)以引用 ENUM 成員。不將整數值儲存在 ENUM 列中的主要原因很明顯,MySQL 最終引用索引而不是值,反之亦然。

示例

以下示例可以清楚地說明這一點 −

mysql> Create table enmtest(Val ENUM('0','1','2'));
Query OK, 0 rows affected (0.18 sec)

mysql> Insert into enmtest values('1'),(1);
Query OK, 2 rows affected (0.19 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> Select * from enmtest;
+-----+
| Val |
+-----+
| 1   |
| 0   |
+-----+
2 rows in set (0.00 sec)

在此,我們將‘1’作為字串插入並意外地也插入 1 作為數字(沒有引號)。MySQL 將我們的數字輸入混淆地用作索引值,即對成員列表中的第一項的內部引用(即 0)。

更新於:2020-06-20

1 千次閱讀

開啟你的 職業生涯

透過完成課程獲得認證

開始
Advertisement 廣告
© . All rights reserved.