今天發現mysql中有set這種數據類型,工作的業務中也使用到了。網上查閱資料後,小結一下 先總結一下兩者的分別 set和enum類似表單中的多選和單選,set和enum在資料庫內部是用整數表示的,顯示給我們看的可以是字元串(避免使用數字字元串) api中對兩種類型的解釋如下 兩種類型的數據個數有限 ...
今天發現mysql中有set這種數據類型,工作的業務中也使用到了。網上查閱資料後,小結一下
先總結一下兩者的分別
set和enum類似表單中的多選和單選,set和enum在資料庫內部是用整數表示的,顯示給我們看的可以是字元串(避免使用數字字元串)
api中對兩種類型的解釋如下
兩種類型的數據個數有限制,再根據2^64=65536,所以推測跟電腦的硬體有關係,目前電腦有64位,還沒有128位的緣故
set中的多選怎麼實現的呢?自己做了些測試,如下
新建一個表db_set,擁有set以及enum兩個列對比 DROP TABLE if EXISTS db_set; create table db_set( id int AUTO_INCREMENT primary set1 set('x','y','z') not null, enum1 enum('one','two','three') not null); 以整數形式插入幾條數據,由於兩種類型的數據在內部是以整數形式表示的,所以插入數值型值 insert into db_set(set1, enum1) values(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10),(11,11); 查詢表中的數據 SELECT * FROM db_set; 結果如下
到這裡大家應該知道了,set是通過二進位的位進行映射的,這也解釋了為什麼set只支持最多64個值(空值不算)的緣故。