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

Sequelize returns lowercase letter when inserting a one letter uppercase letter?

本文关键字:大写字母 返回 小写字 一个 插入 Sequelize      更新时间:2023-09-26

为什么当我插入一个大写字母时,序列化插入并返回一个小写字母?

示例:我插入"N",它保存"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"
  })

DB中"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"
      })

我检查了我的DB,确实在那里保存了正确的大小写。

之后我将创建以下数据:

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"
      })

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

执行此操作的可能不是sequelize。我测试过了,没有重现你描述的行为。你确定在tobeinserts变量中发送的是"N"而不是"N"吗?或者你的数据库中有一个触发器或其他东西导致了这个