【问题标题】:sql2o - select query removing trailing spaces from VARCHAR coulmnsql2o - 选择查询从 VARCHAR 列中删除尾随空格
【发布时间】:2019-05-09 19:17:02
【问题描述】:

使用 sql2o (https://github.com/aaberg/sql2o)

选择具有尾随空格的varchar列(例如"some value ")返回值是"some value"

当从 mysql cli 中选择时,结果包含尾随空格

找不到任何文档来防止这种情况发生

  • 表:
CREATE TABLE names
(
    name     VARCHAR(100),
    PRIMARY KEY (experiment_key, metric_name)
);
  • 代码示例:
 Sql2o sql2o;

        String name = "some name with trailing space    ";
        try (Connection con = sql2o.open()) {
            con.createQuery("INSERT INTO names (name) VALUES(:name)")
                    .addParameter("name", name)
                    .executeUpdate();
        }        


        String nameFromDB; 
        try (Connection con = sql2o.open()) {
            nameFromDB =  con.createQuery("select name from names")
                    .executeAndFetchFirst(String.class);
        }

        if (!nameFromDB.equals(name)){
            throw new RuntimeException("where did the trailing spaces go ??? :( ");
        }

【问题讨论】:

  • INSERT 查询看起来并不实际。应该是INSERT INTO names (name) VALUES(:name)
  • 这只是一个简化的例子,我会更新
  • 是什么让您认为是 sql2o 删除了尾随空格,而不是您连接的数据库?
  • 从 mysql cli 运行查询结果有尾随空格

标签: java mysql sql sql2o


【解决方案1】:

我认为我在 Sql2o 中找到了你的答案。

我相信通过使用String.class,它正在使用 StringConverter 类将您的查询输出转换为字符串。在 StringConverter 类的最底部是这一行:

return val.toString().trim();

找到here

【讨论】:

  • 你认为我可以添加一个自定义转换器来替换它吗?为什么他们最终会修剪?
  • 最终实现了自定义转换器并删除了修剪
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-15
  • 1970-01-01
  • 1970-01-01
  • 2015-04-27
  • 1970-01-01
  • 2018-11-30
  • 1970-01-01
相关资源
最近更新 更多