背景
在一次代码升级之后,数据库的表也有一些修改,所以数据需要从旧数据库复制到新数据库中,我使用navicat的右键-》复制为insert语句对新数据库添加数据,执行完insert命令后,我发现navicat里某行记录一个类型为jsonb的字段在navicat中的表格里显示不全,点击那个单元格,将鼠标移到最后,末尾不是jsonb的"]"符号,而是个“:”,我以为是这行记录没有insert成功(实际上是成功的,否则也不会有这行记录),回到旧数据库单独复制这行记录的这个字段,然后粘贴到新数据库里面,哪知无论怎么粘贴,都显示粘贴不成功,报错信息为不是一个完整的json。问题是我其余的这个jsonb类型的字段是可以粘贴成功的。
解决过程
无奈之下,我又回去检查旧数据库,发现旧数据库里navicat显示这行记录的这个字段是全的,我重新复制为insert语句,单独看insert语句里的内容,也是全的,我们搜了下jsonb字段的长度限制,发现长度应该是够的,否则旧数据库不可能保存的下来。
我又怀疑是不是直接复制粘贴的问题,但是最开始通过insert语句也有同样显示不全的问题。
最后我怀疑是不是navicat显示不完全,但是实际是完全的。我实验了一下,将新数据库里的该行记录复制为insert语句,然后将该语句粘贴出来看,破案了,果然是insert语句里该字段的内容是全乎的。
总结
“图片与实际不符”的现象果然是处处存在。但是最后一个疑问:为什么navicat显示的旧数据库里的那个jsonb类型的字段就能完全展示出来呢?