使用MySQL数据库在Laravel 5.7中进行开发。在我的几个数据库列上,我都有枚举的类型-没有进行研究,而是使枚举充满了数字(0-2或0-3)。在阅读了优点和缺点之后,我想离开枚举并将它们转换为tinyints。
将表中列的类型更改为tinyint并将字符串'0','1','2','3'转换为tinyint的最佳方法是什么?
我真的不想在此过程中丢失数据。
https://laravel.com/docs/5.7/migrations#modifying-columns具有有关修改列的信息,但是不支持枚举:
仅以下列类型可以被“更改”:bigInteger,二进制,布尔值,日期,dateTime,dateTimeTz,十进制,整数,json,longText,mediumText,smallInteger,字符串,文本,时间,unsignedBigInteger,unsignedInteger和unsignedSmallInteger。
最佳答案
为了安全起见,我会使用临时列进行此操作;
ALTER TABLE tbl ADD COLUMN _temp_col CHAR(1) COLLATE 'latin1_general_ci'; -- CHAR(1) is OK if you only have numeric ENUMs
UPDATE tbl SET _temp_col = col; -- ENUM values would be copied as is
ALTER TABLE tbl MODIFY COLUMN col TINYINT(1) UNSIGNED;
UPDATE tbl SET col = _temp_col; -- Values would be auto-converted to ints
ALTER TABLE tbl DROP COLUMN _temp_col;
关于mysql - 如何将数字枚举列转换为tinyint?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54139390/