带有bcrypt的BINARYtypes的MYSQL字段

我正在看看有关字段长度和types用于bcrypt哈希的这个问题 。 几个答案提到使用BINARY MYSQL列的types。 但是,使用mysql node.js模块读取此列时,会将BINARY列读取为缓冲区types而不是string。 bcrypt比较函数bcrypt.compare(password, hash, callback)不喜欢缓冲区types:

 Error: data and hash must be strings at node_modules/bcrypt/bcrypt.js:150:16 

这使我有两个问题:

首先,我假设我想要做的是hash_buffer.toString() ,但我注意到在文档中有可以使用不同的字符编码。 我不确定使用正确的编码是因为数据并不真正代表实际的字符。 由于我想二进制数据保持不变,我猜测ASCII。 任何人都可以确认吗?

其次,我不明白为什么不使用CHAR数据types。 哈希是专门做成一个可打印的string。 据我所知,MYSQL比较可能不会按预期进行,但是没有适当的时间来search或按密码散列进行sorting。

一般来说,如果MySQL是做比较的话,那么使用BINARY列存储bcrypt哈希值是有意义的。 二进制整理将防止不必要的比较结果,例如'A'等于'a' ; 这在Base64编码中有很大的不同。

但是,如果只在应用程序中执行比较,则可以节省麻烦,并使用常规CHAR列来存储散列值。