mysql - gradle中字符串的字符编码

标签 mysql groovy gradle

那么在 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 的值(以及 project.scenarioFilenameclassifier),从而产生一些像\xAC 这样的转义字符是 Not Acceptable 。

但有趣的是,如果我这样做

      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')}" 却不是?

顺便说一句,在 gradle.properties 中设置 systemProp.file.encoding=utf-8 不会改变任何内容。

最佳答案

使用时在 GString 末尾添加 .toString() ("${..}:${..}".toString())常规 SQL。

关于mysql - gradle中字符串的字符编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18139370/

相关文章:

mysql - 如何在MySQL中合并具有相似名称的多个表

MySQL BMI计算

groovy - 使用脚本有条件地更新 Elasticsearch 中的文档

android-studio - Gradle 同步错误

mysql - 如何在 Flask-Sqlalchemy 中设置全局级别 group_concat_max_len ?

groovy - SoapUI LoadTest 执行失败

string - 将相同的字符串附加到 Groovy 中的字符串列表

android - 运行时异常 : Some file crunching failed on Android gradle

gradle - Gradle任务依赖项未在子项目上执行

php - Google 新闻 - 网址方案和主键