Javascript Knex.js&;MySQL:将整数转换为布尔值以进行批量选择

Javascript Knex.js&;MySQL:将整数转换为布尔值以进行批量选择,javascript,mysql,node.js,knex.js,Javascript,Mysql,Node.js,Knex.js,我使用Knex作为与MySQL数据库通信的服务器 我有select语句,它们可能会从数据库返回大量记录。这些记录中的一些单元格是布尔值,这实际上意味着它们只是整数(0或1)。在JavaScript中,我需要将它们作为布尔值,以便在JSON中以实际的“true”或“false”值而不是“0”和“1”发送它们。到目前为止,我找到的唯一解决方案是通过循环运行查询结果,将每个tinyint记录更改为布尔值。但是,我想知道,是否有一种方法可以配置查询生成器来自动返回特定单元格的布尔值?确定。经过多次搜索,

我使用Knex作为与MySQL数据库通信的服务器


我有select语句,它们可能会从数据库返回大量记录。这些记录中的一些单元格是布尔值,这实际上意味着它们只是整数(0或1)。在JavaScript中,我需要将它们作为布尔值,以便在JSON中以实际的“true”或“false”值而不是“0”和“1”发送它们。到目前为止,我找到的唯一解决方案是通过循环运行查询结果,将每个tinyint记录更改为布尔值。但是,我想知道,是否有一种方法可以配置查询生成器来自动返回特定单元格的布尔值?

确定。经过多次搜索,我在这里找到了答案:

诀窍是将Knex使用的带下划线的mysql驱动程序配置为typeCast属性:

var db=require('knex'))({
客户端:“mysql”,
连接:{
主机:“localhost”,
用户:“mysql”,
密码:“mysql”,
数据库:“mysql”,
类型转换:函数(字段,下一个){
if(field.type='TINY'&&field.length==1){
返回(field.string()=='1');//1=true,0=false
} 
返回next();
}
}
});
db(“我的表”)
.选择()
。然后((行)=>{
//现在,每行的布尔字段都是true/false,而不是1/0

});我知道这很旧,但您可以将其放入knex迁移中:

table.boolean(‘is_my_type’).notNullable().defaultTo(false);

它仍将使用TINYINT,因此您仍可以使用您的铸造功能

此功能有效!请注意,您将
typeCast
属性放在
connection
对象中。我使用的是MySQL 5.7,出于某种原因,需要查找
['LONG','TINY'].includes(field.type)
,即使我的所有字段都是
TINYINT(1)
。不知道是什么导致了差异,否则效果很好。