所以在gradle构建中,为什么Java字符串
使用UTF-8编码的mySQL数据库可以接受 "foo"
,但是GString
"${someValue}"
不会?
这是怎么回事:
sql.withTransaction {
def batchResult = sql.withBatch(
20,
'insert into table(job_id, log_name, scenario_name, classification, value) values (?,?,?,?,?)'){ stmt ->
rows.each { r ->
def jobId = "${System.getenv('JOB_NAME')}:${System.getenv('BUILD_NUMBER')}"
def classifier = "{'observer_id':${r['observer_id']}, 'sensor_name':${r['sensor_name']}}"
stmt.addBatch(
jobId,
"foo",
project.scenarioFilename,
classifier,
r['count(1)'])
}
}
此操作失败,因为UTF-8编码的数据库拒绝jobId
(以及project.scenarioFilename
和classifier
)的值,将某些转义字符(例如\ xAC)作为不可接受的内容。
但有趣的是,如果我这样做
stmt.addBatch(
new String(jobIdStr.getBytes("UTF-16"),"UTF-8"),
"foo",
new String(project.scenarioFilename.getBytes("UTF-16"),"UTF-8"),
new String(classifier.getBytes("UTF-16"),"UTF-8"),
r['count(1)']
)
它有效。
那么为什么"foo"
被视为UTF-8,但"${System.getenv('JOB_NAME')}"
不是?
顺便说一句,在systemProp.file.encoding=utf-8
中设置gradle.properties
不会改变任何内容。
答案 0 :(得分:1)
在groovy sql中使用时,在GStrings(.toString()
)的末尾添加"${..}:${..}".toString()
。