[数据库]cakephp操作ENUM、tinyint等类型的一点说明

之前无法正常更新ENUM类型的数据,感觉是框架函数实现的bug。

问题很诡异,因为INIT的时候是可以成功写入的,没理由UPDATE的时候不成功。

前后琢磨了一下午,发现了一点蛛丝马迹才终于想通。问题出在Cakephp操作对ENUM类型值的保存做了一点手脚。

具体关于ENUM的实现暂时不提。

我的bug原因在于我的ENUM取的值是‘1’,‘2’,‘3’,‘4’,当我通过Model->set('col1','4')时,table里的表是1,跟init的时候一样。当时我认为UPDATE ‘col1’失败。但其实并不是。

因为我定义MYSQL ENUM的时候,顺序被存成了‘4’‘3’‘2’‘1’的顺序。ENUM其实是有先后次序的,不是数据结构中的SET。

cakephp在检测数据库字段类型的时候,识别出这是一个ENUM的类型,所有当我Model->set('col1','4')时候,它认为这是一个int类型的顺序值,于是选择了ENUM的第4个值,也就是‘1’。刚好我的init值是1,所以看起来好像没update成功一样。

将mysql的ENUM顺序改为1,2,3,4后,update就正常了。

 

关于tinyint(1),据说可以存储0-9的数据,关于tinyint的存储结构暂时没查。但tinyint(1)在cakephp中无法存储4,其他则没有验证。

改成tinyint(2)之后就可以设置为4了。

一点参考:http://blog.csdn.net/iefreer/article/details/6904235

转载于:https://www.cnblogs.com/oDoraemon/p/5798705.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值