为啥 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 【问题描述】:我在谷歌上搜索如何将 1
或 0
存储为值。我选择了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);
它显示:
有多离奇?不应该显示1
或0
吗?
编辑:
并且这个特定用户的性别行值在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 位运算不同
为啥 BluetoothManager.OpenGattServer() 在我的 Nexus 7 上总是返回 null?