Re: json/jsonb inconsistence

Поиск
Список
Период
Сортировка
От Andrew Dunstan
Тема Re: json/jsonb inconsistence
Дата
Msg-id 53872420.2000207@dunslane.net
обсуждение исходный текст
Ответ на json/jsonb inconsistence  (Teodor Sigaev <teodor@sigaev.ru>)
Ответы Re: json/jsonb inconsistence
Список pgsql-hackers
On 05/29/2014 07:55 AM, Teodor Sigaev wrote:
> # select  '"\uaBcD"'::json;
>    json
> ----------
>  "\uaBcD"
>
> but
>
> # select  '"\uaBcD"'::jsonb;
> ERROR:  invalid input syntax for type json
> LINE 1: select  '"\uaBcD"'::jsonb;
>                 ^
> DETAIL:  Unicode escape values cannot be used for code point values 
> above 007F when the server encoding is not UTF8.
> CONTEXT:  JSON data, line 1: ...
>
> and
>
> # select  '"\uaBcD"'::json -> 0;
> ERROR:  invalid input syntax for type json
> DETAIL:  Unicode escape values cannot be used for code point values 
> above 007F when the server encoding is not UTF8.
> CONTEXT:  JSON data, line 1: ...
> Time: 0,696 ms
>
> More than, json looks strange:
>
> # select  '["\uaBcD"]'::json;
>     json
> ------------
>  ["\uaBcD"]
>
> but
>
> # select  '["\uaBcD"]'::json->0;
> ERROR:  invalid input syntax for type json
> DETAIL:  Unicode escape values cannot be used for code point values 
> above 007F when the server encoding is not UTF8.
> CONTEXT:  JSON data, line 1: [...
>
> Looks like random parse rules.
>


It is documented that for json we don't check the validity of unicode 
escapes until we try to use them. That's because the original json 
parser didn't check them, and if we started doing so now users who 
pg_upgraded would find themselves with invalid data in the database. The 
rules for jsonb are more strict, because we actually resolve the unicode 
escapes when constructing the jsonb object. There is nothing at all 
random about it, although I agree it's slightly inconsistent. It's been 
the subject of some discussion on -hackers previously, IIRC. I actually 
referred to this difference in my talk at pgCon last Friday.

Frankly, if you want to use json/jsonb, you are going to be best served 
by using a UTF8-encoded database, or not using non-ascii unicode escapes 
in json at all.

cheers

andrew



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Rahila Syed
Дата:
Сообщение: Re: Compression of full-page-writes
Следующее
От: Greg Stark
Дата:
Сообщение: backup_label revisited