1m帶寬做網(wǎng)站快不seo 知乎
問題
在一次上線時(shí),發(fā)現(xiàn)通過腳本添加的狀態(tài)表中,待提交的狀態(tài)不正確,本來應(yīng)該是0,線上是101。
原因
默認(rèn)情況下,MySQL對應(yīng)自增列,認(rèn)為0和null等價(jià)(因?yàn)閙ysql認(rèn)為0不是最佳實(shí)踐不推薦使用,其實(shí)這里我這個(gè)表主鍵不應(yīng)該設(shè)為自增,設(shè)置習(xí)慣了),所以雖然insert中有0,也會(huì)被mysql忽略改用自動(dòng)生成的值。
解決方案
1. 不使用自增
一般使用0,代表有特殊含義,這種表主鍵可以的化,不需要加入自增;
2. 設(shè)置sql_mode
如果確實(shí)要自增,又需要插入0值,那就需要設(shè)置sql_mode
在遷移腳本開頭加入
set sql_mode = concat(@@sql_mode,' NO_AUTO_VALUE_ON_ZERO')
NO_AUTO_VALUE_ON_ZERO
就是告訴mysql, 在0時(shí),不使用自增值;- 注意該設(shè)置僅在本次會(huì)話中有效;
- 設(shè)置sql_mode時(shí),需要帶上原有的sql_mode;