我正在使用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
怎么了?
答案 0 :(得分:3)
您似乎正在尝试将十六进制转换为十进制。在这种情况下,试试这个:
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
确实不喜欢字符数为奇数的字符串,但我认为这不是你想要的。