Ruby on Rails:根据数据库排序规则比较两个字符串

时间:2011-03-18 14:50:45

标签: ruby-on-rails ruby collation

我有一个单词列表,想要找到数据库中已存在的单词。

我决定使用“SELECT word FROM table WHERE word IN(array_of_words)”而不是进行数十次SQL查询,然后遍历结果。

问题是数据库整理。

http://www.collation-charts.org/mysql60/mysql604.utf8_general_ci.european.html

有许多不同的字符,MySQL视为相同。但是,在Ruby代码中,string1不等于string2。

例如:如果单词是“šuo”,数据库也可能返回“suo”,如果找到了(并且没关系),但是,当我想检查时,如果找到“šuo”的东西,Ruby,当然,返回false(šuo!= suo)。

那么,有没有办法比较Ruby中两个字符串的相同排序规则?

1 个答案:

答案 0 :(得分:0)

我使用了类似这样的iconv:

require 'iconv'

class String
  def to_ascii_iconv
    Iconv.new('ASCII//IGNORE//TRANSLIT', 'UTF-8').iconv(self).unpack('U*').select { |cp| cp < 127 }.pack('U*')
  end
end

puts 'suo'.to_ascii_iconv
# => suo
puts 'šuo'.to_ascii_iconv
# => suo
puts 'suo'.to_ascii_iconv == 'šuo'.to_ascii_iconv
# => true

希望有所帮助!

祖宾