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:
[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 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
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 Jak masz jeszcze jakiś pomysł - z chęcią wypróbuję.
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 Zrobiłem altera, którego podałeś i przeleciałem dostępne configi (nie znalazłem nic o kodowaniu). Niestety - alter nie pomógł Zapytanie wydane z poziomu cmd wskazuje na to, że to jednak problem MySQL’a, nie ROR’a:
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
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
Ooo - rewela. Działa 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
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 Ale to akurat mniejszy problem - ważne, że dodawanie z widoku śmiga.
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 I dużo klepię w konsoli, bo lubię CLI. Vi(m) i nano to moje 2 ulubione edytory pod konsolą, a emacsa nie cierpię Co do Assemblera - jeżeli ktoś stworzy framework (AoR?;)) podobny w założeniach do RoR - chętnie wypróbuję
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 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 To byłaby udręka, a nie “zabawa z programowania”.
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.