неверные шестнадцатеричные данные: нечетное число цифр [PostgreSQL] - PullRequest
2 голосов
/ 07 августа 2011

Я использую PostgreSQL 9

При попытке вставить данные у меня что-то не так.

Это работает

INSERT INTO unicode_blocks_bytea(
        a, z, block_name)
VALUES 
(decode('FE50','hex'), decode('FE6F','hex'), 'Small Form Variants')

но это не так, я получил ошибку:

INSERT INTO unicode_blocks_bytea(
        a, z, block_name)
VALUES 
(decode('10000','hex'), decode('1007F','hex'), 'Linear B Syllabary')

ошибка:

ERROR:  invalid hexadecimal data: odd number of digits
********** Error **********
ERROR: invalid hexadecimal data: odd number of digits
SQL state: 22023

Что не так?

1 Ответ

3 голосов
/ 07 августа 2011

Похоже, вы пытаетесь преобразовать из шестнадцатеричного в десятичное.В этом случае попробуйте следующее:

select x'10000'::integer

Результат равен

65536

Также

select x'1007f'::integer

Результат равен

65663

encode и decode немного отличаются.Например:

select decode('FE50','hex')

производит

\376P

Это то, что вы хотите?Я думаю, вы должны сказать

select x'FE50'::integer

, что дает вам

65104

Это, вероятно, то, что вы хотите, потому что вы, кажется, записываете начальную и конечную кодовые точки блоков Unicode.Я предполагаю, что идея заключается в том, что вы пытаетесь найти блок для данной кодовой точки, и для этого вам понадобятся целочисленные значения.

Это правда, что encode / decode не любят строки снечетное количество символов, но я не думаю, что это то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...