为什么unicode编码会在通过dbi-gem发送到ODBC接口时丢失?
我们写了一个sinatra-application,它通过DBI连接到SAP HANA数据库。后者应该无关紧要,因为我可以在SAP HANA Studio中手动执行UTF8语句。
我的代码看起来简化如下:
# encoding: UTF-8
require 'dbi'
target = 'Sch\u00f6nefeld' # sample for sanitized user input. Definitely UTF-8.
# printed version: target='Schönefeld'
dbh = DBI.connect 'DBI:ODBC:DB_NAME', 'username', 'password'
sth = dbh.prepare 'INSERT INTO tab VALUES (0, ?)'
sth.execute(target)
# [...]
sth.finish
现在当我检查数据库时,新条目是:(两个随机垃圾字符)
| 0 | Sch$#nefeld |
如果我在执行并手动执行之前将语句打印到命令行,则数据库包含我想要的内容:
| 0 | Schönefeld |
有没有办法确保发送到数据库的字符串保持编码为UTF-8?
我应该改变编码(例如改为UTF-16)吗?
这可能是DBI gem或ODBC驱动程序的问题吗?