Перемещение закодированных данных с помощью Rails - PullRequest
2 голосов
/ 09 декабря 2010

Я пытаюсь переместить данные из одной базы данных в другую из задачи rake.

Однако у меня возникают некоторые проблемы с кодированием некоторых данных:

rake aborted!
PGError: ERROR:  invalid byte sequence for encoding "UTF8": 0x92
HINT:  This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding".

Что я могу сделать, чтобы устранить эту ошибку и получить данные?Насколько я могу судить (ничего не зная о кодировке), исходная БД - латинская1.

1 Ответ

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

если обе базы данных являются PG, то вы можете экспортировать и импортировать всю базу данных, используя параметры pg_dump, чтобы изменить кодировку ... это, вероятно, самый эффективный способ сделать это

если вы делаете это с помощью грабли, вы можете выполнить транскодирование внутри грабли ... это означает, что вам придется прикоснуться к каждому атрибуту и ​​перекодировать его ...

как кажется, ваша новая база данных - utf8, тогда как старая - latin1

Вы можете сделать это, кодируя каждое строковое / текстовое / текстоподобное значение, используя ... проверка для response_to? (: Encoding) гарантирует, что данные кодируются, только если к ним прикреплена некоторая информация о кодировании, т.е. е. числовые значения не будут транскодироваться

def transcode(data, toEnc = 'utf8')
  if data.respond_to?(:encoding) && data.encoding.name != toEnc
    return data.dup.force_encoding toEnc
  end
  data
end      

теперь вы можете просто прочитать запись из старой базы данных, запустить ее с помощью этого метода и затем записать ее в новую базу данных

u = OldDBUser.first
u.attribute_names.each { |x|
  u[x.to_sym] = transcode u[x.to_sym]
}
#... whatever you do with the transcoded u

... ну, я не проверял их, но, пожалуйста, сделайте, может быть, это все, что вам нужно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...