Estou usando o PostgreSQL 9.6 no Linux. Recebi um erro ao fazer um teste na função chr() .
postgres=# select chr(1199111);
ERROR: requested character too large for encoding: 1199111
postgres=# select chr(55296);
ERROR: requested character not valid for encoding: 55296
postgres=# select chr(100000);
chr
-----
?
(1 row)
Aqui, como você pode ver com o valor 100k
, funcionou ( não gerou erro ), porém outros não. Estou curioso sobre isso. Alguém poderia por favor me explicar o porquê?
Eu anexo script de teste
do
$$
declare
str text ;
begin
for i in 1..1200000
loop
begin
select chr(i) into str;
exception when others then raise notice '=> i: % => str: %', i , str ;
#exit; -- you can uncomment this star key
end ;
end loop;
end
$$ ;
ATUALIZADA
postgres=# show server_encoding;
server_encoding
-----------------
UTF8
(1 row)
Porque não gerou um erro, não significa que funcionou . Nenhum desses funciona , mas apenas um deles é tão absurdo que faz
chr()
explodir.186A0
) mapeia para o Plano Multilíngue Suplementar, mas não há nada lá (ainda).U+D800
) mapeia para o Plano Multilíngue Básico, mas nada está lá (ainda).U+124C07
) nem é válido, mapeia para um plano tão alto que o Unicode nem suporta.Unicode suporta apenas 1.111.998: 17 planos × 65.536 caracteres por plano - 2.048 substitutos - 66 não caracteres. Veja esta resposta para mais informações . 1,11 milhão de pontos de código, é muito menos do que 1,19 milhão de pontos de código.