1

我使用 Enum 数据类型作为在另一个表中作为外键引用的主键。如果我必须向这个枚举值添加一个额外的元素,我使用

ALTER TABLE <table> MODIFY <colName> ENUM(<OLD VALUES>, NEW VAL);

在两张桌子上。它工作正常。

我有一个不起眼的例子,我最终从 <255 值增加到更多。在这种情况下,ENUM 需要从 1 字节存储切换到 2 字节存储。那就是它失败的时候。给我

错误 1025 (HY000):将“./TXCAD/#sql-5912_86”重命名为“./TXCAD/EN_TABLE”时出错(错误号:150)

我做了一些研究,发现主表中从 1 字节到 2 字节的转换导致外键数据类型不一致。(如果我从 256+ 值开始,这根本不会发生。我验证了)

有没有办法强制 MySql 从一开始就使用 2 个字节,即使 ENUM() 在创建表期间的值少于 255 个?

使用 MySql - 5.1 InnoDB 表

4

1 回答 1

1

只是让你知道,我搜索了很多。从文档看来,在创建表时获得 2 字节枚举的唯一方法是您提到的方式……也就是说,在您的枚举列表中指定超过 255 个项目。我没有看到允许它的表创建语法的另一部分。您唯一的希望是有一个配置文件参数可以启用不同的默认值。

存在服务器系统变量列表,但我进行了快速搜索,并没有看到对可能更改枚举字段大小默认行为的变量的引用。 http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html (注意,这个页面很大,我的浏览器暂时挂了。)

只是以为您想知道其他人看了这个问题并决定进一步调查,而不仅仅是听蟋蟀...

于 2011-03-12T03:44:22.163 回答