php - MySql - 将字段枚举类型更改为 tinyint 时的奇怪行为

标签 php mysql sql alter-table alter

我正在将枚举类型的所有表字段更新为 tinyint(1),但我看到了一些奇怪的行为。

假设 field_x 类型是 enum('0','1','2');

更改表后(ALTER TABLE a MODIFY field_x tinyint(1) NOT NULL DEFAULT 1),原始值为 0 的字段现在有 1,原始值为 1 的字段现在有 2...

有人知道是什么原因造成的吗?

最佳答案

根本的问题是 enum 在 mysql 中的存储方式

对于 enum('0','1','2') MySQL 在内部将枚举值存储为整数键。

所以对于上面的指标都是

0 = 1
1 = 2
2 = 3

因此,当您将 colum 更改为 tinyint 时,作为字符串的保存值将转换为 tinyint 的相应索引,您将获得

1 for 0, 2 for 1 ....

关于php - MySql - 将字段枚举类型更改为 tinyint 时的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24897758/

相关文章:

sql - 如何设计表的列不固定的模式

php - Laravel 使用变量更改重置密码电子邮件问候语

php - 是否有通过匹配多个条件来排序的 SQL 技术?

mysql - Controller 中的 Symfony 查询

mysql - Rails 连接两个表或用单词替换数字

mysql - 重写SQL查询修复MySQL 5.7严格模式导致的功能依赖问题

sql - 如何在单个查询中使用计数和限制在 postgres 中选择数据

java - 如何将遗留 Java/J2EE 网站移植到现代脚本语言(PHP、Python/Django 等)?

php、mysql数据转换

mysql - 简化查询以创建 TIMESTAMP 列