したがって、gradle ビルドでは、なぜ Java 文字列は
"foo"
UTF-8エンコーディングのmySQLデータベースには受け入れられますが、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
(and project.scenarioFilename
, and 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
ても何も変わりません。