为啥 nodejs 在我的 BIT(1) 行上返回笑脸?

Posted

技术标签:

【中文标题】为啥 nodejs 在我的 BIT(1) 行上返回笑脸?【英文标题】:Why is nodejs returning a smiley face on my BIT(1) row?为什么 nodejs 在我的 BIT(1) 行上返回笑脸? 【发布时间】:2015-05-30 12:38:02 【问题描述】:

我在谷歌上搜索如何将 10 存储为值。我选择了BIT(1) 数据类型:

然后,对于用户身份验证,我将该值存储在一个临时的 TEMPUSER 对象中,就像在 nodejs 中一样:(gender 我的 users 表中的一列)

db.query('SELECT * from users WHERE id = ' + db.escape(userID) + ' AND password = ' + db.escape(userPassword) + '', function(err, results) 
    TEMPUSER = 
        gender: results[0].gender
    
);

现在,当我 console.log TEMPUSER 使用:

console.log('Gender Data: ' +TEMPUSER.gender);

它显示:

有多离奇?不应该显示10吗?

编辑:

并且这个特定用户的性别行值在mysql中也设置为1

【问题讨论】:

【参考方案1】:

我怀疑如果你这样做了

console.log(typeof TEMPUSER.gender);

...你会发现它是 object,因为 the plugin you're using 将 BIT 列映射到 NodeJS Buffer 对象。所以你会得到一个Buffer 一个条目。 console.log 语句中的 + 将其转换为具有一个字符的字符串,字符代码为 U+0001。在我的 Windows 系统上,如果我这样做:

console.log("\u0001");

...我也有笑脸。

改为使用缓冲区:

TEMPUSER = 
    gender: results[0].gender[0]

当查询返回 NULL 时,我会检查你得到了什么;可能是一个空缓冲区(上面会给你undefined),也可能是null(上面会给你一个错误)。

【讨论】:

哇,完全忘记了 MYSQL 节点插件。我一直无缘无故地将nodejs放在总线下。顺便说一句,如果有人看到这个线程,我正在使用felixge's 插件。这会是您认为@T.J 的错误,还是只是正常行为?因为我将只使用.charCodeAt(0) 方法并完成它。我只是觉得有点有趣/奇怪的是,一个笑脸会突然冒出来这么随机..哈哈 @NiCkNewman:在该链接之后,它表示将BIT 映射到Buffer。我已经更新了答案。 我正要回复并告诉你我必须使用toString()哈哈。快速编辑 TJ,不知道你可以使用这样的缓冲区。棒极了。刚刚学到了一些我以前从未有过的关于节点的东西。现在喜欢BIT 数据类型。我开始担心并认为我必须搬到tinyint :(。是的,现在是solved【参考方案2】:

这真的很有趣,应该避免那种尴尬的行为。

关于系列笔记:

首先,您应该使用tinyint 数据类型保存布尔值。 (可选,限制为一个字符。)

其次,作为性别数据类型的决定,快速搜索结果如下:

Storing sex (gender) in database

祝你好运!

【讨论】:

是的,对我来说要么是bit(1),要么是char(1)。使用@T.J.克劳德的修复,我宁愿使用位,因为它比字符少。感谢您的洞察力! ~(当我有成千上万个字符时,这对我很重要)

以上是关于为啥 nodejs 在我的 BIT(1) 行上返回笑脸?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 jQuery .ajax() 路由的 .done() 方法没有在我的 NodeJS、Express 和 Mongoose 项目中触发?

为啥我的光标在 NextLine() 之后出现在错误的行上?

为啥 append 方法在我的列表中返回 None ? [复制]

为啥 MySQL BIT_OR() 返回的值与 PHP 位运算不同

递归方法返回并打印 String 的 Int 数

为啥 BluetoothManager.OpenGattServer() 在我的 Nexus 7 上总是返回 null?