Witajcie, muszę przekonwertować sporą ilość danych z jednej bazy do drugiej. Póki co próbowałem to zrobić w najprostszy sposób jaki przyszedł mi do głowy:
[code]require ‘rubygems’
require ‘mysql’
con = Mysql.new(‘localhost’, ‘user’, ‘pass’, ‘db’) #baza z ktorej kopiuje
sec = Mysql.new(‘localhost’, ‘user’, ‘pass’, ‘db’) #baza docelowa
q = con.query('set names utf8)
q = sec.query('set names utf8)
rs = con.query(‘SELECT * FROM users LIMIT 10’)
rs.each_hash { |h|
sec.query(“INSERT INTO users VALUES (’’, ‘#{h[‘login’]}’, ‘#{h[‘email’]}’, ‘#{pass}’, ‘#{html}’)”)
}
con.close
sec.close[/code]
Napotkałem dwa problemy. Mimo użycia “set names utf8” po wgraniu do bazy zamiast polskich znaczków mam znaki zapytania. Dodam, że baza danych źródłowa jest zapisana w utf8 i w phpmyadmin normalnie widzę tam polskie znaki. Sądze, że to komplikuje znacząco sprawę bo tak na prawdę to nie wiadomo czemu wrzuca znaki zapytania W sytuacji gdy “ręcznie” robie eksport bazy z jednej i wklejam do okienka zapytań w drugiej znaki polskie są.
Drugi problem to konstrukcja INSERT INTO. W takiej postaci spędza mi sen z powiek. W polu html jest spory bajzel wygnerowany przez narzędzie WYSIWYG i przy obecnej postaci często pole jest ucinane. Może lepiej skorzystać z konstrukcji INSERT gdzie umieszczone będą ?, a potem wyszczególnione zmienne do podstawienia. W phpie coś takiego kiedyś robiłem, ale niestety nie wiem jak to zrobić w Rubym. Szukałem w necie konstrukcji metody query, ale nic nie znalazłem na temat wcześniej wspomnianego podstawienia.
Byłby ktoś tak dobry i naprowadził nieco w tych dwóćh sprawach?
Pozdrawiam