Sequelize数据库错误数据被截断为第 4 行的列位置



我在发送更新请求时收到SequelizeDatabaseError Data truncated for column 'position' at row 4,如下所示: 关于如何修复数据库错误的任何建议?

正在执行(默认(:更新user设置photo=?,name=?,email=?,phonenumber=?,position=?,password=?,updatedAt=?其中email= ? SequelizeDatabaseError:第 4 行"位置"列的数据被截断 at Query.formatError (C:\Project\soccerpepode_modules\sequelize\lib\dialects\mysql\query.js:244:16( at Execute.handler [as onResult] (C:\Project\soccerpepode_modules\sequelize\lib\dialects\mysql\query.js:51:23(

module.exports = function(sequelize, DataTypes) {
return sequelize.define('user', {
name: {
type: DataTypes.STRING(30),
allowNull: false
},
email: {
type: DataTypes.STRING(100),
allowNull: false
},
phonenumber: {
type: DataTypes.STRING(50),
},
id: {
type: DataTypes.INTEGER(10).UNSIGNED,
allowNull: false,
primaryKey: true,
autoIncrement: true
},
password: {
type: DataTypes.STRING(50),
allowNull: false
},
privilege: {
type: DataTypes.ENUM('PLAYER','ADMIN'),
},
photo: {
type: DataTypes.STRING(30),
},
position: {
type: DataTypes.ENUM('FORWARD','MID-FIELD','DEFENDER','GK'),
}
}, {
tableName: 'user'
});
};

server.js

const UserModel = userSchema(sequelize, DataTypes);
app.put('/service/profile', async (req, res, next) => {
try {
const userEmail = req.query.email;
var selector = { 
where: { email: userEmail }
};
const updatePlayer = await UserModel.update(req.body, selector);
console.log("Server side update method log:" + updatePlayer);
res.status(200).json({ success: true });
} catch (err) {
return next(err);
}
});

我认为问题出在 ENUM 上,您只能将其用于Postgres而不是mysql, (Ref(

position: {
type: DataTypes.ENUM('FORWARD','MID-FIELD','DEFENDER','GK'),
}

将其更改为简单string类型并再次检查,

position: {
type: DataTypes.STRING(30)
}

注意:您可能需要再次创建表或更新字段 在模型中更改此设置后手动执行此操作,否则您仍将获得 错误

更改数据类型不是解决方案。您必须检查尝试保存的数据。例如:如果 ENUM("0", "1"( 并且您尝试保存数据 0,则它会显示这种类型的错误。您必须像"0"一样保存。然后它不会再次显示这种类型的错误消息。

如果你想在mysql中使用ENUM,你应该这样使用它

position: {
type: DataTypes.ENUM,
values: ['player', 'admin],
defaultValue: 'monthly' // A default value just incase you fail to provide one...
},

我希望这有帮助...

我花了很多时间来追踪这个错误。

我有以下所有解决方案,但不起作用。

就我而言,我的坏是... 我忘记了有保存新旧数据的克隆表/复制/历史记录/触发器

确保您的历史记录表具有相同的数据类型。 我有这样的桌子

form3
hs_form3 // its mean history with revision (number of revisi data) column and action column (create/update/delete/any)

仅供描述

CREATE TABLE hs_form3 LIKE form3;
ALTER TABLE hs_form3 MODIFY COLUMN id int(11) NOT NULL,
DROP PRIMARY KEY, ENGINE = InnoDB, ADD action VARCHAR(8) DEFAULT 'insert' FIRST,
ADD revision INT(6) NOT NULL AUTO_INCREMENT AFTER action,
ADD dt_datetime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP AFTER revision,
ADD PRIMARY KEY (revision),
ADD KEY `user_id` (`user_id`),

而且我没有在服务器上运行迁移,因为很多变化,我只在本地主机上运行。 在服务器中,我只是通过导出导入或添加手动放置了一个新表。 在我遇到有关服务器上迁移的问题并且没有捕获SQL表中的上次更改并且没有时间解决之前。

相关内容

  • 没有找到相关文章

最新更新