使用Sequel(Ruby)编码数据集

使用Sequel(Ruby)编码数据集,ruby,sequel,Ruby,Sequel,我们正在使用Sequel实现一些数据迁移。旧的遗留应用程序使用专有字符集来存储Umlaut字符ÄÜ等。 当Sequel处理来自数据库的结果集时,有没有一种方法可以挂接转换过程来编码字符串类型?目前,在处理结果集时,我们必须在每个地方执行此转换,而结果集是有效的,但会污染代码。通过使用函数在数据库级别执行转换也是一种选择,但会使SQL语句非常不可读 在您的情况下,这可能是最好的修复类型: DB.extend_datasets do def fetch_rows(*) super do

我们正在使用Sequel实现一些数据迁移。旧的遗留应用程序使用专有字符集来存储Umlaut字符ÄÜ等。
当Sequel处理来自数据库的结果集时,有没有一种方法可以挂接转换过程来编码字符串类型?目前,在处理结果集时,我们必须在每个地方执行此转换,而结果集是有效的,但会污染代码。通过使用函数在数据库级别执行转换也是一种选择,但会使SQL语句非常不可读

在您的情况下,这可能是最好的修复类型:

DB.extend_datasets do
  def fetch_rows(*)
    super do |h|
      h.each_value{|v| v.replace(fix_encoding(v)) if v.is_a?(String)}
      yield h
    end
  end

  def fix_encoding(s)
    # ...
  end
end
但是,最好在驱动程序级别解决这个问题,在这种情况下,您应该与底层数据库驱动程序的维护人员联系