插入一个大写字母时,Sequelize返回小写字母?

时间:2015-10-09 16:32:34

标签: javascript mysql sequelize.js

当我插入一个大写的大写字母时,为什么sequelize会插入并返回一个小写字母?

示例:我插入" N"它节省了#34; n"而不是" N"。

我插入了以下内容:

  console.log(toBeInserted) // let's say toBeInserted = "N" 
  db.dataset.findOrCreate({
    where:{
      name: toBeInserted
    }
  })
  .spread(function(inserted, created) {
    console.log(inserted); //here I get back inserted = "n"
  })

查看SQL DB,我可以看到"n"已存储,而不是"N"

但是一旦输入值至少包含两个字母,sequelize就会正确保存:

  console.log(toBeInserted) // toBeInserted = "Hi" 
  db.dataset.findOrCreate({
    where:{
      name: toBeInserted
    }
  })
  .spread(function(inserted, created) {
    console.log(inserted); //here I get back inserted = "Hi"
  })

在数据库中,值"Hi"已正确保存。

有人可以向我解释为什么会发生这种情况以及如何防止这种情况发生?我希望sequelize保存值就像我插入它一样,即如果我想插入" N" (大写字母" N")它应该保存" N"。

编辑: Sequelize能够保存仅小写和大写的一个字母输入。但是,看起来findOrCreate()方法无法在创建大写字母时识别大写字母。

示例:我有一个空数据库,我创建了以下输入:

console.log(toBeInserted) // toBeInserted = "A" 
      db.dataset.findOrCreate({
        where:{
          name: toBeInserted
        }
      })
      .spread(function(inserted, created) {
        console.log(inserted + " " + created); //here I get back inserted = "A true"
      })

我检查了我的数据库,确实用正确的大写/小写保存在那里。

之后,我将创建以下数据:

console.log(toBeInserted) // toBeInserted = "a" 
      db.dataset.findOrCreate({
        where:{
          name: toBeInserted
        }
      })
      .spread(function(inserted, created) {
        console.log(inserted + " " + created); //here I get back inserted = "a false"
      })

我再次检查我的数据库,数据没有改变。

1 个答案:

答案 0 :(得分:0)

这可能不是这样做的续集。我测试了它并没有重现你描述的行为。你确定你真的在发送" N"而不是" n"在toBeInserted var?或者你的数据库中有一个触发器或其他东西导致这种情况发生。