json
欄位,只檢查語法正確性,不檢查 Unicode 字元是否可以被正確編碼。jsonb
檢查比較嚴謹,如果 Unicode 字元無法被資料庫編碼, jsonb
會拒絕存入。null
字元。至於什麼是只檢查語法正確性,不檢查 Unicode 字元是否可以被正確編碼呢?舉例來說,在資料庫裡面分別對 json
和 jsonb
欄位塞入一模一樣的 JSON 資料。
-- 插入使用 Unicode escape 字元
INSERT INTO test_json (data_json, data_jsonb) VALUES
('{"name": "\u4e2d\u83ef", "emoji": "\ud83d\ude00"}', '{"name": "\u4e2d\u83ef", "emoji": "\ud83d\ude00"}');
查詢的時候可以發現, json
的欄位會直接呈現Unicode escape 字元, jsonb
會呈現編碼之後的樣子,這就是兩個欄位型別在處理 Unicode 上的差別,其實這種差別,也跟上一篇說到的 number 型別差異有異曲同工之妙。