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
。