RoR/MySQL - kodowanie

Witam.

Problem dla niektórych może banalny, ale mnie już szlag trafia. MySQL 5 jest świeżo postawiony (na Windowsie), zresztą tak jak cały InstantRails. Używam Railsów 2.0.2., a w database.yml wszędzie (defaultowo zresztą) ustawione jest encoding: utf8. Problem wynika zatem prawdopodobnie po stronie samego MySQL’a, ale pewny nie jestem. Poniżej fragmenty my.ini odpowiedzialne za kodowanie:

[code][mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
default-character-set=utf8

[client]
default-character-set=utf8[/code]
Mimo powyższego MySQL uparcie w pewnych miejscach widzi latin1 (i podejrzewam, że tu właśnie może tkwić przyczyna moich problemów):

mysql> SHOW VARIABLES LIKE 'character%'; +--------------------------+-----------------------------------------------+ | Variable_name | Value | +--------------------------+-----------------------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | C:\InstantRails-2.0-win\mysql\share\charsets\ | +--------------------------+-----------------------------------------------+ 8 rows in set (0.00 sec)
Od 2h próbuje coś z tym zrobić - Google, dokumentacja MySQL i dziesiątki innych stron nie były w stanie mi pomóc :confused: Ma ktoś może jakiś pomysł? Z tego co wiem MySQL jest dość popularną bazą w środowisku RoR, więc nie sądzę, żeby było to coś nie do przeskoczenia.

Z góry dzięki za każdą poradę!

p.s. Tak to wygląda na prostym widoku:

i w bazie:

mysql> select * from notes; +----+---------------+--------------------+ | id | title | content | +----+---------------+--------------------+ | 2 | Test ogonk├│w | Za?├│?? g??l? ja?? | +----+---------------+--------------------+ 1 row in set (0.00 sec)

A sprawdzałeś co by było gdybyś tworząc bazę (np. w phpMyAdmin) ustawił “Metodę porównywania napisów” na utf8_polish_ci. Ten sposób zawsze działa (mi przynajmniej :P) w aplikacjach php-owych (a wiadomo jakie PHP ma problemy z kodowaniem znaków).

UPDATE:
może spróbuj też zmienić collation-server z utf8_general_ci na utf8_polish_ci

Dzięki zlw! Z phpMyAdmin nie korzystam, ale zmieniłem my.ini wg tego co pisałeś - general na polish, zrestartowałem bazę i jesteśmy krok do przodu :slight_smile:

mysql> SHOW VARIABLES LIKE 'character%'; +--------------------------+---------------------------------------+ | Variable_name | Value | +--------------------------+---------------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | C:\INSTAN~1.0-W\mysql\share\charsets\ | +--------------------------+---------------------------------------+ 8 rows in set (0.00 sec)
Niestety - nowo dodana notka nadal jest pokrzaczona - zarówno w bazie, jak i w widoku :confused: Jak masz jeszcze jakiś pomysł - z chęcią wypróbuję.

o! Fajnie, że pomogło.

Niestety nie mam żadnego pomysłu dlaczego dalej się krzaczy. Myślę, że kluczową kwestią może tu być ustawienie kodowania przy tworzeniu bazy. Tak, wiem, że phpMyAdmin to zło (i to jeszcze stworzone przy pomocy “diabła”), ale czasem pomaga.

UPDATE:
może poszukaj jakiejś informacji o kodowaniu w plikach konfiguracyjnych projektu (environment.rb, boot.rb itp.). Możliwe, że gdzieś taka informacja (ustawiana na podst. ustawień bazy) się zapisuje.

UPDATE2:
jeżeli dalej nie będzie działało spróbuj zmienić kodowanie całej bazy (zamiast zakładając ją od nowa z nowym kodowaniem). Jeżeli tak bardzo nie lubisz phpMyAdmin, spróbuj zwykłym zapytaniem: ALTER DATABASE `baza_danych` DEFAULT CHARACTER SET utf8 COLLATE utf8_polish_ci
(kod został wygenerowany przez phpMyAdmin - on naprawdę się przydaje :P)

Dzięki za próbę pomocy zlw :slight_smile: Zrobiłem altera, którego podałeś i przeleciałem dostępne configi (nie znalazłem nic o kodowaniu). Niestety - alter nie pomógł :confused: Zapytanie wydane z poziomu cmd wskazuje na to, że to jednak problem MySQL’a, nie ROR’a:

[code]mysql> insert into notes values(null, ‘test’,‘zażółć gęślą jaźń’);
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> select * from notes;
±—±------------±-------------------+
| id | title | content |
±—±------------±-------------------+
| 4 | gkhgjkg | ghkghkj |
| 5 | xfvcbxbcvcx | fgjfghjhfjgjhgjgee |
| 6 | 678678 | 68686 |
| 7 | yyyy | yy |
| 8 | tyiutyiu | tyitu |
| 11 | yuiyuiuy | yiuyui |
| 14 | test | za??? g??l? ja? |
±—±------------±-------------------+
7 rows in set (0.00 sec)[/code]
Ehh - no nic - walczę dalej. Dzięki raz jeszcze.

p.s. wychodzę z założenia, że w phpMyAdmin nie zrobię niczego ponad to co mogę sam wklepać do my.ini albo wykonać ręcznie z poziomu cmd :wink:

hmm, nie działa? No to walczymy dalej :slight_smile:

Spróbuj zrobić jeszcze jednego ALTERa, ale tym razem nie bazy danych a pojedyńczych pól/tabel:

ALTER TABLE `tabela` CHANGE `pole` `pole` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL , CHANGE `pole2` `pole2` TEXT CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL

ALTER TABLE `tabela`  DEFAULT CHARACTER SET utf8 COLLATE utf8_polish_ci

Cóż, po takich zabiegach zawsze wszystko zaczynało mi działać, więc może tym razem się uda :slight_smile:

p.s może i można zrobić to samo, tylko po co się męczyć? Nie łatwiej jest wszystko wyklikać? Skoro nie lubisz graficznych interfejsów to może zamiast windowsa używaj linuxa (oczywiście bez środowisk graficznych - “magia czarnego ekranu” ;)), zamiast edytorów/IDE GUI tylko Vi/nano/emacs, a żeby wszystkiego stało się zadość to programuj w Assemblerze, bo dobrze jest sobie czasem utrudnić życie :stuck_out_tongue:

Ooo - rewela. Działa :smiley: Znaczy prawie działa, ale jak dla mnie jest już super - dzięki! Nie mogę dać Ci tu plusa za pomoc, ale stawiam wirtualne piwko :slight_smile:

Reasumując - jak dodaję notkę z poziomu widoku - nie krzaczy!

Tylko odczyt z bazy mam nadal z krzakami, ale to może być wina cmd, który może mieć problem z UTF-8:

mysql> select * from notes; +----+--------------+----------------------------+ | id | title | content | +----+--------------+----------------------------+ | 4 | gkhgjkg | ghkghkj | | 5 | xfvcbxbcvcx | fgjfghjhfjgjhgjgee | | 6 | 678678 | 68686 | | 7 | yyyy | yy | | 8 | tyiutyiu | tyitu | | 11 | yuiyuiuy | yiuyui | | 14 | test | za???? g??l? ja? | | 18 | Kolejny test | Za┼╝├│┼é─ç g─Ö┼Ťl─ů ja┼║┼ä | +----+--------------+----------------------------+ 8 rows in set (0.00 sec)
No i teraz jest też problem z insertami z wiersza poleceń - zamiast dawać krzaki, obcina wszystko od krzaka w prawo :stuck_out_tongue: Ale to akurat mniejszy problem - ważne, że dodawanie z widoku śmiga.

[code]mysql> insert into notes values(null, ‘Trzeci test’,‘zażółć gęślą jaźń’);
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> select * from notes;
±—±-------------±---------------------------+
| id | title | content |
±—±-------------±---------------------------+
| 4 | gkhgjkg | ghkghkj |
| 5 | xfvcbxbcvcx | fgjfghjhfjgjhgjgee |
| 6 | 678678 | 68686 |
| 7 | yyyy | yy |
| 8 | tyiutyiu | tyitu |
| 11 | yuiyuiuy | yiuyui |
| 14 | test | za??? g??l? ja? |
| 18 | Kolejny test | Za┼╝├│┼é─ç g─Ö┼Ťl─ů ja┼║┼ä |
| 19 | Trzeci test | za |
±—±-------------±---------------------------+
9 rows in set (0.00 sec)[/code]
p.s. Używam GUI tylko tam gdzie go faktycznie potrzeba, a Linuksa używam dość często :stuck_out_tongue: I dużo klepię w konsoli, bo lubię CLI. Vi(m) i nano to moje 2 ulubione edytory pod konsolą, a emacsa nie cierpię :wink: Co do Assemblera - jeżeli ktoś stworzy framework (AoR?;)) podobny w założeniach do RoR - chętnie wypróbuję :smiley:

No! Fajnie, że działa. Cieszę się, że mogłem pomóc.

p.s widzę, że miłośnić czarnego ekranu… no cóż, każdy ma swoje odchyły :wink: Jak dla mnie tak wielkie przywiązanie do konsoli i unikanie interfejsów graficznych to troche “cofanie się w rozwoju”. Po coś bowiem te interfejsy zostały stworzone. A co do AoR - chyba się nie da :stuck_out_tongue: To byłaby udręka, a nie “zabawa z programowania”. :slight_smile:

UPDATE: co do widoku w konsoli, to rzeczywiście możliwe, że to cmd nie przetwarza UTF-8. W końcu to windows, więc pewnie cp1250/Windows-1250.

Tak żeby spowalniać pracę.

Przepraszam za offtop nie mogłem sie powstrzymać

co do reszty to polecam autorowi wątku instalację linuxa