sqlite3 varchar que coincide con "me gusta" pero no "="

Utilizando Rails 3.1 y sqlite3 para entornos de desarrollo y prueba.

Se agregó una nueva tabla en una migración:

create_table :api_keys do |t|
  t.string :api_key
  t.integer :user_id
  t.timestamps
end

Esto produce una tabla con el siguiente esquema:

create_table "api_keys", :force => true do |t|
  t.string   "api_key"
  t.integer  "user_id"
  t.datetime "created_at"
  t.datetime "updated_at"
end

En el modelo ActiveRecord:

before_create :fill_api_key

private

def fill_api_key
  self.api_key = SecureRandom.hex(30)
end

Método de buscador dinámico de ActiveRecordfind_by_api_key(api_key) no funciona (devuelve nulo). Lo mismo con

ApiKey.where({:api_key => 'something'}).first

En sqlite3, hago lo siguiente:

insert into api_keys (id, api_key) values (-1, '12345');

Si ahora ejecuto una selección:

select api_keys.* from api_keys where api_keys.api_key = '12345';

se encontrará el registro.

Los datos preexistentes creados desde mi aplicación se muestran si ejecuto una selección sin filtrar:

select api_keys.* from api_keys;

Si trato de encontrar un registro preexistente pegando en mi consulta una larga cadena hexadecimal de uno de esos registros preexistentes:

select api_keys.* from api_keys where api_keys.api_key = 'long hex string';

then no devuelve resultados. Si intento esto en su lugar:

select api_keys.* from api_keys where api_keys.api_key like 'long hex string';

Entonces obtengo un partido.

He creado un índice en api_keys.api_key pero eso no tuvo ningún efecto.

Este problema afecta a otro modelo en mi aplicación que produce una cadena similar de dígitos hexadecimales aleatorios usando Digest :: SHA1 :: hexdigest en su lugar.

Jame