Благодаря помощи @gazler и @basgys мне удалось отследить проблему:
На самом деле это проблема кодирования, вызванная функцией Digest :: Sha2 # hexdigest.Возвращает строку, которая закодирована как ASCII-8BIT.При сохранении этого в базе данных, он, кажется, автоматически конвертируется в строку UTF-8 (я проверяю это, выполняя запрос select hex(songhash) from songs
).Однако при использовании строки в запросе это преобразование не выполняется.
Внутренний ruby, похоже, автоматически обрабатывает различные преобразования кодировки.Вот почему "abc"=="abc"
хотя они могут иметь разную кодировку.
Я уверен, что это не ожидаемое поведение, однако я не знаю, является ли это ошибкой - и является ли она ошибкой, является ли онанаходится где-то внутри ActiveRecord, драйвера SQLite или самого SQLite.
Теперь я могу добавить .encode("UTF-8")
к результату функции дайджеста.