Ruby:DBI gem的Unicode问题

时间:2015-05-22 09:07:32

标签: ruby encoding utf-8 odbc ruby-1.8.7

为什么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驱动程序的问题吗?

0 个答案:

没有答案