【发布时间】:2017-10-29 19:23:42
【问题描述】:
我在 SQL Server 数据库中存储用于 Web 服务身份验证的 JWT 令牌。我已将包含标记的列声明为 nvarchar(max) 类型,并将它们作为简单字符串传递到数据库中。当我插入令牌时,SQL Server 将 b'...' 添加到它。例如,假设我添加令牌 ABC123,然后它存储 b'ABC123'。
这会导致问题,因为当我将存储在数据库中的令牌与通过 api 传递的令牌进行比较时,由于额外的字符,比较失败(数据库似乎确实添加了一个小写 b 和存储字符串的两个单引号)。
我知道一旦我从数据库中提取字符串,我就可以去掉 b 和引号,但我想知道 SQL Server 为何这样做以及如何防止它这样做。
无论如何,任何见解都将不胜感激。
编辑: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。)在这种情况下,我将如何解决它?
【问题讨论】:
-
SQL Server 没有这样做。显示您用于插入的代码。
-
我不这么认为,我认为你插入它,我建议你检查你的代码。
标签: python sql-server pyodbc nvarchar