問題
在一次上線時,發現通過腳本添加的狀態表中,待提交的狀態不正確,本來應該是0,線上是101。
原因
默認情況下,MySQL對應自增列,認為0和null等價(因為mysql認為0不是最佳實踐不推薦使用,其實這里我這個表主鍵不應該設為自增,設置習慣了),所以雖然insert中有0,也會被mysql忽略改用自動生成的值。
解決方案
1. 不使用自增
一般使用0,代表有特殊含義,這種表主鍵可以的化,不需要加入自增;
2. 設置sql_mode
如果確實要自增,又需要插入0值,那就需要設置sql_mode
在遷移腳本開頭加入
set sql_mode = concat(@@sql_mode,' NO_AUTO_VALUE_ON_ZERO')
NO_AUTO_VALUE_ON_ZERO
就是告訴mysql, 在0時,不使用自增值;- 注意該設置僅在本次會話中有效;
- 設置sql_mode時,需要帶上原有的sql_mode;