首页 > 解决方案 > 为什么 knex.js 允许插入类型与其迁移不同的数据?

问题描述

在过去的几天里,我一直在使用 knex.js,我注意到即使我指定了一些列的类型,我也可以插入任何我想要的类型。

例如,我有这张表:

 exports.up = function (knex) {
  return knex.schema
    .createTable('users', function (table) {
      table.increments('id').primary();
      table.string('login', 255).notNullable();
      table.string('password', 255).notNullable();
      table.string('user_type', 255);

即使我将字符串作为登录名、密码和用户类型的类型,我也可以插入整数并且不会引发错误。它不应该抛出一个错误吗?

标签: node.jsknex.js

解决方案


它是依赖于数据库驱动程序的功能。Knex 真的不关心您传递给查询的参数,它不知道有关您创建的模式的任何信息。

因此,当您将日期或数字提供给作为部分的 DB 驱动程序时,它可能会也可能不会将类型转换为例如从整数到字符串。

由于数据库实际上不适用于 javascript 类型,因此 DB 驱动程序总是需要从值 JS 表示形式到 DB 表示形式进行某种类型的转换。因此,预计会有一些自动类型转换。


推荐阅读