SQL 服务器将 b'...' 添加到我存储的 jwt 令牌

SQL Server adds b'...' to the jwt tokens I store

我将用于 Web 服务身份验证的 JWT 令牌存储在 SQL 服务器数据库中。我已将保存标记的列声明为 nvarchar(max) 类型,并将它们作为简单字符串传递到数据库中。当我插入令牌时,SQL 服务器向其添加 b'...'。例如,假设我添加了令牌 ABC123,那么它存储 b'ABC123'。

当我将存储在数据库中的令牌与通过 api 传递的令牌进行比较时,这导致了问题,由于额外的字符(数据库似乎确实有在存储的字符串中添加了一个小写的 b 和两个单引号)。

我知道从数据库中提取字符串后,我可以去掉 b 和引号,但我想知道为什么 SQL 服务器这样做以及如何防止它正在做。

无论如何,任何见解将不胜感激。

编辑:pyodbc 是否有可能这样做?这是我要插入的代码:

cnxn = pyodbc.connect("<connection string>")
crsr = cnxn.cursor()
crsr.execute("insert into jwt values (?,?)", [userId, str(auth_token)])

可能混淆了Python 3 和Python 2 串? (我使用的是 Python 3.6。)在这种情况下,我该如何解决?

原来是 python 的 "str" 转换。 jwt.encode returns 一个字节数组,然后 str 变成 b'...'。解决方案是显式解码字节而不是使用 str。所以我的新插入方法是:

crsr.execute("insert into jwt values (?,?)", [userId, auth_token.decode("utf-8")])

确实是一个简单但非常晦涩的解决方案。希望我的努力对其他人有所帮助!