我使用ruby-gem sequel从 MSSQL-Server 表中读取 utf-8 编码的数据。表的字段定义为nvarchar,它们在 Microsoft Server Management Studio 中看起来是正确的(西里尔文是西里尔文,中文看起来是中文)。
我将我的数据库连接到
  db = Sequel.connect(
    :adapter=>'ado', 
    :host     =>connectiondata[:server], 
    :database=>connectiondata[:dsn], 
    #Login via SSO
  )
  sel = db[:TEXTE].filter(:language=> 'EN') 
  sel.each{|data| 
    data.each{|key, val|
      puts "#{val.encoding}: #{val.inspect}"  #-> CP850: ....
      puts val.encode('utf-8')
    }
  }      
这适用于英语,德语也返回一个可用的结果:
CP850: "(2 St\x81ck) f\x81r
(2 Stück) für ...
但转换成的结果CP850,却不是原来的UTF-8。  
西里尔文(我用保加利亚语测试过)和中文只产生“?” (合理,因为CP850不包括中文和保加利亚字符)。
我还通过 odbc-connection 进行了连接:
    db = Sequel.odbc(odbckey,
      :db_type => 'mssql',  #necessary
      #:encoding => 'utf-8',  #Only MySQL-Adapter
    ) 
结果是ASCII-8BIT,我必须将数据转换force_encoding为 CP1252(不是 CP850!)。但是西里尔文和中文仍然是不可能的。
我已经尝试过的:
- MySQL 适配器似乎有一个编码选项,我检测到 MSSQL 没有效果。
 - 我用 sqlite 和 sequel 做了类似的测试,我对 unicode 没有问题。
 - 我安装
SQLNCLI10.dll并使用它作为提供者。但我得到一个无效的连接字符串属性-error(与 相同sqlncli)。 
所以我的最后一个问题是:如何通过 ruby 和 sequel 读取 MS-SQL 中的 UTF-8 数据?
我的环境:
客户:
- Windows 7的
 - 红宝石 1.9.2
 - 续集 3.33.0
 
数据库:
- SQL 服务器 2005
 - 数据库有排序规则 Latin1_General_CI_AS
 
准备好我的问题后,我找到了解决方案。我会将其发布为答案。但我仍然希望,有更好的方法。