O jsonb armazena dados em um formato binário decomposto, não como uma sequência ASCII/UTF-8,
mas como código binário. Isso o torna um pouco mais lento para entrada devido à sobrecarga adicional de conversão, mas
significativamente mais rápido para processamento, uma vez que nenhuma nova análise é necessária.
O jsonb também suporta indexação, o que pode ser uma vantagem significativa.
O jsonb não preserva o espaço em branco, não preserva a ordem de chaves
de objetos e não mantém chaves de objetos duplicadas. Se chaves duplicadas forem especificadas na entrada, somente
o último valor será mantido.
Recomenda-se que os aplicativos armazenem dados JSON como jsonb,
a menos que haja necessidades bastante especializadas, como suposições anteriores sobre a ordenação de chaves
de objetos.
A RFC 7159 permite sequências JSON para conter sequências de escape Unicode denotadas por
\uXXXX. A função de entrada para jsonb não permite escapes Unicode
para caracteres não ASCII (aqueles acima de U + 007F), a menos que a codificação do banco de dados seja UTF8. O jsonb rejeita \u0000. A razão para isso é que
\u0000 não pode ser representado no tipo de texto do PostgreSQL. O jsonb
insiste que qualquer uso de pares substitutos do Unicode para designar caracteres fora do Unicode Basic
Multilingual Plane esteja correto. Os escapes Unicode válidos são convertidos no caractere ASCII ou UTF8
equivalente para armazenamento; isso inclui compactar pares substitutos em um único caractere.
Ao converter a entrada textual JSON em jsonb, os tipos
primitivos descritos pela RFC 7159 são efetivamente mapeados para os tipos nativos do PostgreSQL. O jsonb rejeita os números que estão fora do intervalo do tipo de dados numéricos
do PostgreSQL.