无效的十六进制数据:奇数位[PostgreSQL]

时间:2011-08-07 06:48:16

标签: postgresql

我正在使用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 个答案:

答案 0 :(得分:3)

您似乎正在尝试将十六进制转换为十进制。在这种情况下,试试这个:

select x'10000'::integer

结果是

65536

另外

select x'1007f'::integer

结果是

65663

encodedecode略有不同。例如:

select decode('FE50','hex')

产生

\376P
这是你想要的吗?我想你应该说

select x'FE50'::integer

给你

65104

这可能是您想要的,因为您似乎正在记录Unicode块的起始和结束代码点。我认为你的想法是你试图找到给定代码点的块,为此你需要整数值。

encode / decode确实不喜欢字符数为奇数的字符串,但我认为这不是你想要的。

相关问题