2011-08-07 28 views
1

我使用的是PostgreSQL 9無效的十六進制數據:奇數位數[PostgreSQL]

當試圖插入數據時,我得到了一些錯誤。

這是工作

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 

有什麼不對?

回答

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不喜歡有奇數字符的字符串,但我不認爲這就是你想要的。

+0

解碼('010000','十六進制')將給與解碼('10000','十六進制')相同的結果? – Thessa

+0

您的意圖是產生65536十進制數,我會懷疑。所以是的。 PostgresQL很奇怪,大約10000令人驚訝。 –

+0

是這個bug嗎?我很困惑。 – Thessa