1
當使用Groovy連接到Oracle時,我有一個奇怪的問題。 我創建了以下測試表:Groovy和Oracle編碼問題
CREATE TABLE t (text VARCHAR2 (256));
INSERT INTO t VALUES ('[Hallo][Hällo][Hello][Hi]');
我想找到所有包含在方括號中的字符串。下面Groovy代碼未能找到第二個([你好]):
import groovy.sql.Sql
sql = Sql.newInstance('jdbc:oracle:thin:@server:1521:ORCL', 'user',
'password', 'oracle.jdbc.OracleDriver');
sql.eachRow("select text from t") { row ->
row.text.eachMatch(/\[[A-Za-zä\-]+\]/) { match ->
println match
}
}
使用直接按預期工作的字符串:
'[Hallo][Hällo][Hello][Hi]'.eachMatch(/\[[A-Za-zä\-]+\]/) { match ->
println match
}
也在做着同樣的事情,從優秀醇」的Java工作正常。所以我猜測這個問題應該存在於Groovy SQL對象的某個地方。
我注意到的最後一件事是兩個字符串(從結果集中獲取字符串vs將其嵌入到源代碼中)沒有相同的編碼。當我在eachRow
內部打印Hällo時,我在Windows控制檯中獲得H?llo
,但直接打印時,我獲得了H├νllo
。