2010-08-10 33 views
3

我正在嘗試從Oracle 9i數據庫中提取記錄,其值爲特定列的'FOO - BAR'。連字符和破折號的好奇案例

'FOO - BAR'條件值出現在表中,但是當我運行查詢時,結果不會到來。

打破了我的頭一段時間後,發現它們的大小有所不同。

'FOO – BAR' 
'FOO - BAR' 

這次我複製了(通過SQLDeveloper)DB值並在Eclipse IDE中粘貼了值。我沒有看到Eclipse中的任何區別。當我從IDE運行查詢時,令我驚訝的是它工作並且價值觀即將到來。

我部署了相同的類文件到我們的服務器(UX盒),並再次回到方形1號 - 值不會來。

我試着將IDE的文件編碼從默認(Cp1252)更改爲UTF-8,現在一切正常。

有人可以解釋發生了什麼?連字符的大小是否隨着編碼而變化? 我們是否有three不同種類的破折號?

+0

不幸的是,視覺效果丟失 - 在這裏這兩個連字符都是相等的... – 2010-08-10 09:26:30

+0

@Andreas_D試試這個http://img820.imageshack.us/i/hyphens.png/:D – HanuAthena 2010-08-10 10:02:53

回答

5

em-dash,en-dash,連字符等有很多不同的Unicode字符,它們用於文本中的不同上下文中。

您可能想要閱讀"Dash" wikipedia article以獲取更多信息。請注意,一個hyphen是不完全相同的東西:)

至於如何編碼進入的東西 - 這取決於你如何插入,檢索,然後顯示數據。我不會開始使用剪切和粘貼 - 這可能會嘗試找到數據庫中表示的實際數據的最接近的可用值。

3

我們有三種不同的破折號嗎?

是的。實際上,根據你算作破折號的情況,連字符和破折號有很多超過3個Unicode代碼點。 (而且@Jon Skeet鏈接到的頁面甚至不會列出所有的破折號字符,例如U2500代碼平面中有4個「水平破折號」代碼點以及「垂直破折號」和「雙破折號」 )

連字符的大小會隨編碼而變化。

這是一個無法回答的問題。連字符的實際大小取決於呈現軟件在屏幕或頁面上的呈現方式。然而事實是,在一些字符集中,有不同的代碼點在概念上表示不同大小的連字符或短劃線。嚴格地說,這與編碼本身無關

這裏可能發生的情況是,字符正在從一個字符集映射到另一個字符集。在某些時候,目標字符集不支持多個連字符/短劃線字符,並且映射會悄悄地將「時髦」連字符轉換爲「普通」連字符。

剪切和粘貼字符不會幫助你。您需要一種以十六進制格式查看實際代碼點值的方法。

0

嘗試 選擇RAWTOHEX(COL)從表

  • 我從我的Oracle實例遙遠,但我認爲從內存 這個作品它給你一個十六進制轉儲,然後查找代碼
0

您可以藉助ASCII() Oracle函數發現存儲在數據庫中的實際代碼。 例如

select ascii(substr(t.strng_field, 5, 1)) from string_table t 

但是,處理這種情況的實際函數依賴於字符串列的數據庫字符集和填充表的數據源。

你可以選擇字符串字符集翻譯功能,如convert,decomposeunistr列出的here