2011-11-11 57 views
2

我遇到了一個非常奇怪的問題。除了駐留在默認(「PUBLIC」)模式中的所有表格外,我還有一個在單獨的模式中創建的表格(有這樣一個有效的商業理由,但這裏沒有關係)。當我跑從不同模式的表格中選擇「找不到列」

select * from schema1.table1 

一切正常。如果我試圖做到這一點,但明確提及列名稱,例如

select col1, col2 from schema1.table1 

查詢失敗,並顯示「Column col1 not found; 42S22/42122」錯誤。只要在select中的任何位置引用該列(從子句/ where子句/ etc ...)就會發生這種情況。

列名稱正確,它們顯示在INFORMATION_SCHEMA中。此外,如果我引用它們,查詢可以正常工作 - 但是這會產生一個副作用,使列名區分大小寫,然後在Hibernate中失敗,這顯然無論如何都會將它們大寫。

我可以忽略一些明顯的東西嗎?是否有這種奇怪的行爲的原因或這是一個錯誤?

更新:托馬斯的回答讓我意識到問題不在於不同的模式,而在於如何創建該模式中的表;特別是使用帶引號的標識符。下面是再現了H2 1.3.161問題(最新版本ATM)的腳本:

create table table1(col1 int, "col2" int); 
insert into table1 values(1, 1); 
select * from table1; -- works 
select col1 from table1; -- works 
select "col2" from table1; -- works 
select col2 from table1; -- fails 

我不明白爲什麼還有最後2個查詢之間的差別。列名在這裏區分大小寫(因爲它是通過帶引號的標識符定義的),但它確實具有正確的大小寫。 INFORMATION_SCHEMACOLUMNS顯示兩列之間沒有區別(除名稱)。是否通過強制大寫所有查詢來獲取未引用列的大小寫不敏感?

上述腳本按預期工作(如在所有查詢中成功完成)在Postgres中。

+0

「數據庫」是通用的 - h2是一個特定的數據庫,這就是爲什麼我通常在與mysql,oracle等結合使用時刪除標籤的原因。我忘了添加sql標記... –

+0

@OMG Ponies - 「database」is通用的,但它也有更多的用戶。雖然這看起來確實是一個特定於H2的問題,但有人可能在另一個數據庫中遇到過類似問題。感謝您添加「sql」 - 我沒有想到這一點。 – ChssPly76

回答

1

我無法重現該問題。你能發佈一個完整的,可重現的問題嗎?我跑在H2控制檯下面的腳本,它工作(意思是,我沒有得到任何例外):

drop all objects; 
create schema schema1; 
create table schema1.table1(col1 int, col2 int); 
insert into schema1.table1 values(1, 1); 
select * from schema1.table1; 
select col1, col2 from schema1.table1; 
+0

謝謝你的回答,托馬斯。它讓我意識到問題實際上是在創建表格時使用帶引號的標識符。我已經更新了上面的問題,幷包含了用於重現問題的完整腳本。 – ChssPly76

0

我有同樣的問題,但對我來說,我使用不當"代替'查詢

相關問題