mysql - @mysql/xdevapi 在插入数据时返回无效的输入表达式(MySQL 8)

标签 mysql node.js

我正在使用@mysql/xdevapi与 NodeJS 和 MySQL 8 docker container 一起打包.

我得到的错误是:

Error: invalid input expression
    at module.exports (C:\Users\BugHunter\Projects\nines\server\node_modules\@mysql\xdevapi\lib\DevAPI\Util\parseFlexibleParamList.js:43:15)

这是我的表格:

CREATE TABLE IF NOT EXISTS `surveyrewards`.`users` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `firstname` VARCHAR(20) NOT NULL,
  `surname` VARCHAR(20) NOT NULL,
  `birthday` DATE NULL,
  `gender` ENUM("male", "female") NOT NULL,
  `email` VARCHAR(255) NOT NULL,
  `postcode` VARCHAR(10) NULL,
  `is_subscribed` TINYINT NOT NULL DEFAULT 0,
  `is_confirmed` TINYINT NOT NULL DEFAULT 0,
  `last_mailed` TIMESTAMP NULL,
  `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE INDEX `email_UNIQUE` (`email` ASC) VISIBLE)
ENGINE = InnoDB;

还有我的 Node 代码using these docs :

require('dotenv').config()

const mysqlx = require('@mysql/xdevapi')

const config = {
  host: process.env.MYSQL_HOST ,
  user: process.env.MYSQL_USER,
  port: parseInt(process.env.MYSQL_PORT),
  password: process.env.MYSQL_PASSWORD,
  schema: process.env.MYSQL_DATABASE
}
mysqlx.getSession(config)
.then(session => {
  console.log(process.env)
  const table = session.getSchema(config.schema).getTable('users')
  return table
    .insert([ 'firstname', 'surname', 'email', 'gender', 'is_subscribed', 'is_confirmed' ])
    .values('Bob', 'hope', 'bob@example.com', 'male', 0, 0)
    .execute()
})
.then(() => console.log('Works'))
.catch(err => console.warn(err))

错误是 vauge,我不知道如何从这里开始,因为我的代码是相同的。有什么建议吗?

最佳答案

这实际上是一个错误,这就是错误消息不清楚的原因。 :)

当前不接受 0 等虚假值作为有效的 values() 参数。但事实并非如此。如果您愿意,可以通过MySQL bug tracker举报使用 Connector for Node.js 类别,但您可以将其视为正在跟踪。

一种令人讨厌的解决方法是使用字符串。即使 SQL 数据类型是 TINYINT 就像您的情况一样,它仍然可以工作并且该值将被“强制”。

return table
  .insert([ 'firstname', 'surname', 'email', 'gender', 'is_subscribed', 'is_confirmed' ])
  .values('Bob', 'hope', 'bob@example.com', 'male', '0', '0')
  .execute()

免责声明:我是连接器的首席开发人员。

关于mysql - @mysql/xdevapi 在插入数据时返回无效的输入表达式(MySQL 8),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51996626/

相关文章:

mysql - 自连接表以获取 2 列的所有组合的值

MySQL:任何改进最佳匹配存储过程的建议

mysql - 如何使用 Knex 迁移器 CLI 命令创建 mysql 数据库?

javascript - 捕获 Node ftp 模块中的未捕获异常错误

node.js - Sequelize : Return associated results array without embedded objects

php - 如何让表内的按钮执行mysql查询

MySQL Join 查询返回太多结果

MySQL。从父表中删除而不从子表中删除数据

javascript - 缓存静态页面和内容nodejs

javascript - '类型错误:Points is not a function' in Node. js