mysql 5.7增加了json類型,非常的好用。相信大家都試用過的。
記錄碰到的一個坑。前提:在a 表中有個 sync字段,json類型,默認值是null.
在更新json內字段時使用到了如下的sql:
UPDATE `a` SET `sync` = JSON_SET(`sync`,'$.t',token,'$.s',secret) WHERE id = 1
在測試的時候發現,如果表中字段已經有值,則:
JSON_SET可以成功執行,值有變動時返回1,無變動時返回0.
但!!!在sync是null時,更新一直不生效。
故json類型字段,默認值不要設置為Null,可以給個空json串 '{}' 的默認值.
然后!!!mysql不支持給json類型的字段設置默認值。
所以,最終方案是在insert記錄的時候,json類型字段一定要給個初始值。可以是:'{}','[]',或其它不為空不為null的初始值。
以上,在mysql5.7,mysql8.0中均是如此。