sequelize.sync():NUMBER 附近的 SQL 语法错误

Ami*_*far 3 javascript mysql node.js sequelize.js typescript

我使用 制作了 4 个 Sequelize 模型sequelize.define();。模型几乎是相同的东西,但表名不同。因为我不想在 MySQL cli 上手动创建它们,所以我决定在我的主 index.js 文件中使用 Sequelize.sync() 来让 Sequelize 创建表,但是当我运行应用程序时,它遇到了错误Unhandled rejection SequelizeDatabaseError: You have an error in your SQL syntax;并且没有'不做桌子。

我已经尝试过这两种sequelize.sync();方法sequelize.sync({ force: true }); ,也尝试过一一同步模型,但出现了相同的错误!

我的模特之一

export const Product = sequelize.define(
  "product",
  {
    doInMyPlace: { type: Sequelize.BOOLEAN, allowNull: false },
    address: { type: Sequelize.STRING, allowNull: false },
    mapAddress: { type: Sequelize.STRING, allowNull: false },
    date: { type: Sequelize.STRING, allowNull: false },
    time: { type: Sequelize.STRING, allowNull: false },
    voucher: { type: Sequelize.STRING, allowNull: true },
    companyName: { type: Sequelize.STRING, allowNull: false },
    phoneNumber: { type: Sequelize.STRING, allowNull: false },
    itemCount: { type: Sequelize.NUMBER, allowNull: false }
  },
  {
    freezeTableName: true
  }
);
Run Code Online (Sandbox Code Playgroud)

显示错误

Unhandled rejection SequelizeDatabaseError: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NUMBER NOT NULL, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, P' at line 1
Run Code Online (Sandbox Code Playgroud)

由于该错误针对 SQL 语法,我想知道它是否与我的代码有关,或者只是sequelize 本身的问题。

其余错误

at Query.formatError (C:\Users\Amirali\Desktop\feature-2-authorization\node_modules\sequelize\lib\dialects\mysql\query.js:244:16)
    at Query.handler [as onResult] (C:\Users\Amirali\Desktop\feature-2-authorization\node_modules\sequelize\lib\dialects\mysql\query.js:51:23)
    at Query.execute (C:\Users\Amirali\Desktop\feature-2-authorization\node_modules\mysql2\lib\commands\command.js:30:14)
    at Connection.handlePacket (C:\Users\Amirali\Desktop\feature-2-authorization\node_modules\mysql2\lib\connection.js:408:32)
    at PacketParser.Connection.packetParser.p [as onPacket] (C:\Users\Amirali\Desktop\feature-2-authorization\node_modules\mysql2\lib\connection.js:70:12)
    at PacketParser.executeStart (C:\Users\Amirali\Desktop\feature-2-authorization\node_modules\mysql2\lib\packet_parser.js:75:16)
    at Socket.Connection.stream.on.data (C:\Users\Amirali\Desktop\feature-2-authorization\node_modules\mysql2\lib\connection.js:77:25)
    at Socket.emit (events.js:198:13)
    at addChunk (_stream_readable.js:288:12)
    at readableAddChunk (_stream_readable.js:269:11)
    at Socket.Readable.push (_stream_readable.js:224:10)
    at TCP.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
From previous event:
    at Query.run (C:\Users\Amirali\Desktop\feature-2-authorization\node_modules\sequelize\lib\dialects\mysql\query.js:39:12)
    at runHooks.then.then (C:\Users\Amirali\Desktop\feature-2-authorization\node_modules\sequelize\lib\sequelize.js:643:29)
From previous event:
    at Promise.try.then.connection (C:\Users\Amirali\Desktop\feature-2-authorization\node_modules\sequelize\lib\sequelize.js:643:12)
From previous event:
    at Promise.resolve.retry (C:\Users\Amirali\Desktop\feature-2-authorization\node_modules\sequelize\lib\sequelize.js:639:10)
    at C:\Users\Amirali\Desktop\feature-2-authorization\node_modules\retry-as-promised\index.js:70:21
    at new Promise (<anonymous>)
    at retryAsPromised (C:\Users\Amirali\Desktop\feature-2-authorization\node_modules\retry-as-promised\index.js:60:10)
    at Promise.try (C:\Users\Amirali\Desktop\feature-2-authorization\node_modules\sequelize\lib\sequelize.js:629:30)
From previous event:
    at Sequelize.query (C:\Users\Amirali\Desktop\feature-2-authorization\node_modules\sequelize\lib\sequelize.js:578:23)
    at promise.then (C:\Users\Amirali\Desktop\feature-2-authorization\node_modules\sequelize\lib\query-interface.js:236:46)
From previous event:
    at QueryInterface.createTable (C:\Users\Amirali\Desktop\feature-2-authorization\node_modules\sequelize\lib\query-interface.js:236:20)
    at Promise.try.then.then (C:\Users\Amirali\Desktop\feature-2-authorization\node_modules\sequelize\lib\model.js:1292:39)
    at runCallback (timers.js:705:18)
    at tryOnImmediate (timers.js:676:5)
    at processImmediate (timers.js:658:5)
From previous event:
    at Function.sync (C:\Users\Amirali\Desktop\feature-2-authorization\node_modules\sequelize\lib\model.js:1292:8)
    at Object.<anonymous> (C:\Users\Amirali\Desktop\feature-2-authorization\models\products\product.ts:21:9)
    at Module._compile (internal/modules/cjs/loader.js:776:30)
    at Module._compile (C:\Users\Amirali\Desktop\feature-2-authorization\node_modules\source-map-support\source-map-support.js:521:25)
    at Module.m._compile (C:\Users\Amirali\AppData\Local\Temp\ts-node-dev-hook-7490429646471359.js:56:25)
    at Module._extensions..js (internal/modules/cjs/loader.js:787:10)
    at require.extensions.(anonymous function) (C:\Users\Amirali\AppData\Local\Temp\ts-node-dev-hook-7490429646471359.js:58:14)
    at Object.nodeDevHook [as .ts] (C:\Users\Amirali\Desktop\feature-2-authorization\node_modules\ts-node-dev\lib\hook.js:61:7)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Module.require (internal/modules/cjs/loader.js:690:17)
    at require (internal/modules/cjs/helpers.js:25:18)
    at Object.<anonymous> (C:\Users\Amirali\Desktop\feature-2-authorization\models\products\index.ts:4:1)
    at Module._compile (internal/modules/cjs/loader.js:776:30)
    at Module._compile (C:\Users\Amirali\Desktop\feature-2-authorization\node_modules\source-map-support\source-map-support.js:521:25)
    at Module.m._compile (C:\Users\Amirali\AppData\Local\Temp\ts-node-dev-hook-7490429646471359.js:56:25)
    at Module._extensions..js (internal/modules/cjs/loader.js:787:10)
    at require.extensions.(anonymous function) (C:\Users\Amirali\AppData\Local\Temp\ts-node-dev-hook-7490429646471359.js:58:14)
    at Object.nodeDevHook [as .ts] (C:\Users\Amirali\Desktop\feature-2-authorization\node_modules\ts-node-dev\lib\hook.js:61:7)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Module.require (internal/modules/cjs/loader.js:690:17)
    at require (internal/modules/cjs/helpers.js:25:18)

Run Code Online (Sandbox Code Playgroud)

执行查询

Executing (default): CREATE TABLE IF NOT EXISTS `user` (`id` INTEGER NOT NULL auto_increment , `name` VARCHAR(255) NOT NULL, `phone` VARCHAR(255) NOT NULL, `gender` VARCHAR(255) NOT NULL DEFAULT 'm', `birthday` VARCHAR(255) NOT NULL, `password` VARCHAR(255) NOT NULL, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME
NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_general_ci;
Executing (default): SHOW INDEX FROM `user`
Executing (default): CREATE TABLE IF NOT EXISTS `food` (`id` INTEGER NOT NULL auto_increment , `doInMyPlace` TINYINT(1) NOT NULL, `address` VARCHAR(255) NOT NULL, `mapAddress` VARCHAR(255) NOT NULL, `date` VARCHAR(255) NOT NULL, `time` VARCHAR(255) NOT NULL, `voucher` VARCHAR(255), `companyName` VARCHAR(255) NOT NULL,
`phoneNumber` VARCHAR(255) NOT NULL, `itemCount` NUMBER NOT NULL, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_general_ci;
Run Code Online (Sandbox Code Playgroud)

maj*_*rif 9

您应该使用INTEGER而不是NUMBER. 就像这样:

itemCount: { type: Sequelize.INTEGER, allowNull: false }
Run Code Online (Sandbox Code Playgroud)

查看文档,没有提及数据类型NUMBER。虽然我确实找到了这个,但它只是用作其他数据类型的基类。

至于INTEGER,您有以下内容:

Sequelize.INTEGER.UNSIGNED              // INTEGER UNSIGNED
Sequelize.INTEGER(11).UNSIGNED          // INTEGER(11) UNSIGNED
Sequelize.INTEGER(11).ZEROFILL          // INTEGER(11) ZEROFILL
Sequelize.INTEGER(11).ZEROFILL.UNSIGNED // INTEGER(11) UNSIGNED ZEROFILL
Sequelize.INTEGER(11).UNSIGNED.ZEROFILL // INTEGER(11) UNSIGNED ZEROFILL
Run Code Online (Sandbox Code Playgroud)

顺便说一句,你的错误是因为这一行而发生的, MYSQL 中'itemCount' NUMBER NOT NULL没有数据类型。NUMBER