Ruby on Rails: сравните две строки с точки зрения сопоставления базы данных - PullRequest
3 голосов
/ 18 марта 2011

У меня есть список слов, и я хочу найти, какие из них уже существуют в базе данных.

Вместо того чтобы делать десятки запросов SQL, я решил использовать «SELECT word FROM table WHERE word IN (array_of_words)», а затем перебрать результат.

Проблема в сопоставлении базы данных.

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

Есть много разных символов, которые MySQL рассматривает как одинаковые. Однако в коде Ruby строка1 не будет равна строке2.

Например: если слово «šuo», база данных может также вернуть «suo», если оно найдено (и все в порядке), но, когда я хочу проверить, найдено ли что-то с помощью «šuo», Ruby, конечно, возвращает false (šuo! = suo).

Итак, есть ли способ сравнить две строки в Ruby с точки зрения одного и того же сопоставления?

1 Ответ

0 голосов
/ 21 марта 2011

Я использовал 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

Надеюсь, это поможет!

Зубин

...