node.js - 为什么 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);
即使我将字符串作为登录名、密码和用户类型的类型,我也可以插入整数并且不会引发错误。它不应该抛出一个错误吗?
解决方案
它是依赖于数据库驱动程序的功能。Knex 真的不关心您传递给查询的参数,它不知道有关您创建的模式的任何信息。
因此,当您将日期或数字提供给作为部分的 DB 驱动程序时,它可能会也可能不会将类型转换为例如从整数到字符串。
由于数据库实际上不适用于 javascript 类型,因此 DB 驱动程序总是需要从值 JS 表示形式到 DB 表示形式进行某种类型的转换。因此,预计会有一些自动类型转换。
推荐阅读
- python - Python Pandas 删除具有数字的行(不是浮点数也不是整数,而是像 1.2.3)
- python - 移植到 Python 3.7,poster3.encode.multipart_encode,TypeError: memoryview: a bytes-like object is required, not 'str'
- angular - 在 Angular 中使用 IconFinderCore 进行图标化返回“not_found”错误
- r - 如何返回列的行值,使得它们在另一列中的对应值是最小的 n 值,在 R
- amazon-web-services - AWS DeviceFarm 忽略 TestNG 注释
- c# - c#位运算符'&'和'Enum.HasFlag'的区别
- html - 在反应中使禁用的按钮触发onClick事件
- java - 我如何一次接受来自 System.in.read() 的输入?我究竟做错了什么?
- c# - 如何在 ITextsharp 中调整 pdf 页面的页面高度
- java - Java 中的不可变对象 - 重新分配引用