MySQL i UTF-8

Witam,

Problem jak w temacie.
Wiem, że temat był poruszany wiele razy, jednak prześledziłem kilkanaście wątków i nie znalazłem rozwiązania.
Dodam, że wersja:
railsów to 2.3.5,
ruby’ego: 1.9.1p378 (2010-01-10 revision 26273) [i386-mingw32]
mysql 5.1.36
Sterowniki do bazy instalowałem komendami:
gem install mysql
gem install mysql-ruby
Pracuję na Windows 7 x64.

Problem pojawia się po wysłaniu formularza, w którego polach podaję m.in. polskie znaki. W konsoli otrzymuję błąd treści:
Error during failsafe response: “\xC5” from ASCII-8BIT to UTF-8

ERROR NoMethodError: You have a nil object when you didn’t expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.each

Mój plik database.yml ma wpis:

development: adapter: mysql encoding: utf8 reconnect: false database: development pool: 5 username: root password: collation: utf8_polish_ci host: localhost
Odpowiednio mam ustawione kodowanie w bazie. Z racji, że korzystam z WampServera mam w pliku my.ini ustawione sekcje

[client] default-character-set=utf8

[mysqld] port=3306 character-set-server=utf8 collation-server=utf8_polish_ci default-character-set=utf8
Może jeszcze dodam, że metoda kontrolera dodająca wpis do bazy ma postać

[code]def add
if session[:user_id].nil?
redirect_to :controller => ‘user’, :action => ‘login’ and return
else
if request.post? and params[:watek]
@watek = Watek.new(params[:watek])

    @watek.topic = @watek.topic.force_encoding('utf-8')
    @watek.contents = @watek.contents.force_encoding('utf-8')
    @watek.tags = @watek.tags.force_encoding('utf-8')
    if @wthread.save
      flash[:notice] = "watek dodany"
    else
      flash[:notice]="akcja nieudana."
    end
  end
end

end[/code]

Please use English class names and variables.

Czy jesteś pewien że przeglądarka dobrze koduje zapytanie - czyli jako UTF-8? Najlepiej odpowiednie i upewnienie się, że nie jest ręcznie ustawione kodowanie znaków w przeglądarce. Czy możesz podać pełny stack trace wyjątku?

jest poprawnie ustawiony: [code][/code] Stack trace wyjątku wygląda tak [code] C:/Ruby19/lib/ruby/gems/1.9.1/gems/rack-1.0.1/lib/rack/utils.rb:196:in `initialize' C:/Ruby19/lib/ruby/gems/1.9.1/gems/rack-1.0.1/lib/rack/content_length.rb:14:in `new' C:/Ruby19/lib/ruby/gems/1.9.1/gems/rack-1.0.1/lib/rack/content_length.rb:14:in `call' C:/Ruby19/lib/ruby/gems/1.9.1/gems/rack-1.0.1/lib/rack/handler/webrick.rb:50:in `service' C:/Ruby19/lib/ruby/1.9.1/webrick/httpserver.rb:111:in `service' C:/Ruby19/lib/ruby/1.9.1/webrick/httpserver.rb:70:in `run' C:/Ruby19/lib/ruby/1.9.1/webrick/server.rb:183:in `block in start_thread'[/code]

Na 100% lepiej nie ufać czy przeglądarka ustawia poprawnie kodowanie. Oczywiście trzeba to robić, ale zawsze lepiej być świadomym, że świat przeglądarek nie jest idealny.

Wątek zaczęty przez @apohllo bardzo pomoże w temacie.
http://rubyonrails.pl/forum/t2356-Ruby-1.9-i-Rails-2.3.4

ps. 1. nie jestem pewien jak jest z Ruby 1.9.1 i z windowsem ale jak już przebrniesz drobne problemy to proponuję przeskoczyć na Ruby 1.9.2

ps. 2. w Rails 3 jak na dzień dzisiejszy to już jest większy problem.

Dzięki za wskazówki. Próbowałem zainstalować jak to @apohllo nazwał “poprawioną” wersję MySql-a, ale konsola wyświetliła mi poniższe komunikaty:

[code]C:\Windows\System32>gem install jzajpt-mysql-ruby
Building native extensions. This could take a while…
ERROR: Error installing jzajpt-mysql-ruby:
ERROR: Failed to build gem native extension.

C:/Ruby19/bin/ruby.exe extconf.rb
Trying to detect MySQL configuration with mysql_config command…
Failed to detect MySQL configuration with mysql_config command.
Trying to detect MySQL client library…
checking for mysql_query() in -lmysqlclient… *** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers. Check the mkmf.log file for more
details. You may need configuration options.

Provided configuration options:
–with-opt-dir
–without-opt-dir
–with-opt-include
–without-opt-include=${opt-dir}/include
–with-opt-lib
–without-opt-lib=${opt-dir}/lib
–with-make-prog
–without-make-prog
–srcdir=.
–curdir
–ruby=C:/Ruby19/bin/ruby
–with-mysql-config
–without-mysql-config
–with-mysql-dir
–without-mysql-dir
–with-mysql-include
–without-mysql-include=${mysql-dir}/include
–with-mysql-lib
–without-mysql-lib=${mysql-dir}/lib
–with-mysqlclientlib
–without-mysqlclientlib
C:/Ruby19/lib/ruby/1.9.1/mkmf.rb:364:in try_do': The complier failed to generate an executable file. (RuntimeError) You have to install development tools first. from C:/Ruby19/lib/ruby/1.9.1/mkmf.rb:417:intry_link0’
from C:/Ruby19/lib/ruby/1.9.1/mkmf.rb:421:in try_link' from C:/Ruby19/lib/ruby/1.9.1/mkmf.rb:529:intry_func’
from C:/Ruby19/lib/ruby/1.9.1/mkmf.rb:750:in block in find_library' from C:/Ruby19/lib/ruby/1.9.1/mkmf.rb:670:inblock in checking_for’
from C:/Ruby19/lib/ruby/1.9.1/mkmf.rb:276:in block (2 levels) in postpone' from C:/Ruby19/lib/ruby/1.9.1/mkmf.rb:250:inopen’
from C:/Ruby19/lib/ruby/1.9.1/mkmf.rb:276:in block in postpone' from C:/Ruby19/lib/ruby/1.9.1/mkmf.rb:250:inopen’
from C:/Ruby19/lib/ruby/1.9.1/mkmf.rb:272:in postpone' from C:/Ruby19/lib/ruby/1.9.1/mkmf.rb:669:inchecking_for’
from C:/Ruby19/lib/ruby/1.9.1/mkmf.rb:746:in find_library' from extconf.rb:53:in

Gem files will remain installed in C:/Ruby19/lib/ruby/gems/1.9.1/gems/jzajpt-mysql-ruby-2.8.1 for inspection.
Results logged to C:/Ruby19/lib/ruby/gems/1.9.1/gems/jzajpt-mysql-ruby-2.8.1/ext/gem_make.out[/code]
Nie bardzo wiem, co powinienem zrobić.

PS. Czy mógłbyś mi wytłumaczyć jakie korzyści przyniosłaby mi przesiadka na Ruby 1.9.2, odnośnie mojego problemu.

Nie przesiadka na nowa wersje ruby a na jakiś system Unix’owy powinna być twoim pomysłem. Nie trać czasu swojego i naszego.

A brakuje ci plików dev z paczki mysql ale pod win ??? no nie wiem skąd masz je wziąć