🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.php
Article #230556

Re: ZF2 + Doctrine + collation = porazka

#230556
From: Hoozar
Date: Thu, 11 Sep 2014 09:12
46 lines
3159 bytes
W dniu 10.09.2014 o 20:16, Borys Pogoreło pisze:
> Dnia Wed, 10 Sep 2014 08:22:58 +0200, Hoozar napisał(a):
>
>>> To jest udokumentowane zachowanie:
>>> http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/faq.html#how-do-i-set-the-charset-and-collation-for-mysql-tables
>>>
>> I tak i nie. Tak - bo trzeba odpowiednio skonfigurować bazę, żeby
>> uzyskać odpowiednie collation.
>
> Ale to i tak należy zrobić, bo mogą się dziać cuda na różnych hostingach
> (zwłaszcza szwedzkie iso).
>
To oczywiście zrobiłem.

>> Nie - bo w źródłach Doctrine jest wpisane
>> na sztywno 'utf8_unicode_ci'. Nie da się tego zmienić np. opcjami
>> tabeli, bo JoinTable nie ma takiego parametru. Jeśli teraz będę chciał
>> mieć bazę w innym collation czy w innym kodowaniu to i tak się wszystko
>> wywali :-(
>
> W sensie Doctrine i tak ustawi utf8_unicode_ci zamiast dziedziczyć z
> ustawień bazy, pomimo zapewnień w FAQ? Jeśli tak, to faktycznie bym zgłosił
> buga.
>
Dokładnie tak zrobi. To działa w ten sposób:
- jeśli tabela ma ustawione w opcjach (np. adnotacjami) 'collate', to 
Doctrine weźmie przy tworzeniu tabeli 'collate' z opcji.
- jeśli nie ma, to weźmie na sztywno 'utf8_unicode_ci'

Teraz cały problem polega na tym, że przy tworzeniu joinTable nie da się 
podać 'collate' jako opcji tabeli - będzie rzucał błędami, że 
nierozpoznany parametr. Tak więc weźmie opcję defaultową, czyli 
'utf8_unicode_ci'.

Najgorsze jest to, że do wersji 2.2 brał z ustawień bazy. Od 2.3 ma na 
sztywno - nie rozumiem takiego podejścia.

Teraz żeby nie być gołosłownym:
https://github.com/doctrine/dbal/blob/master/lib/Doctrine/DBAL/Platforms/MySqlPlatform.php 
- linia 476
https://github.com/doctrine/dbal/blob/master/UPGRADE.md - na samym dole 
w sekcji 'Upgrade to 2.3':

If you are creating a new MySQL Table through the Doctrine API, 
charset/collate are now set to 'utf8'/'utf8_unicode_ci' by default. 
Previously the MySQL server defaults were used.
Technical Details
Message-ID: <lurp3h$ie3$1@usenet.news.interia.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.interia.pl!not-for-mail
References: <lumnq1$la$2@usenet.news.interia.pl> <lumnro$la$3@usenet.news.interia.pl> <lumpoa$3or$1@node2.news.atman.pl> <lumr3b$805$1@usenet.news.interia.pl> <1a4hqjvn5bpc5$.18pkpldbomhpo$.dlg@40tude.net> <luoqq0$cu8$1@usenet.news.interia.pl> <1b7bjz0upmqms.1do58y9wxdi6$.dlg@40tude.net>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.interia.pl!not-for-mail
From: Hoozar <hoozar@interia.pl>
Newsgroups: pl.comp.lang.php
Subject: Re: ZF2 + Doctrine + collation = porazka
Date: Thu, 11 Sep 2014 11:12:30 +0200
Organization: INTERIA.PL S.A.
Lines: 48
Message-ID: <lurp3h$ie3$1@usenet.news.interia.pl>
References: <lumnq1$la$2@usenet.news.interia.pl> <lumnro$la$3@usenet.news.interia.pl> <lumpoa$3or$1@node2.news.atman.pl> <lumr3b$805$1@usenet.news.interia.pl> <1a4hqjvn5bpc5$.18pkpldbomhpo$.dlg@40tude.net> <luoqq0$cu8$1@usenet.news.interia.pl> <1b7bjz0upmqms.1do58y9wxdi6$.dlg@40tude.net>
NNTP-Posting-Host: 188.123.220.84
Mime-Version: 1.0
X-Trace: usenet.news.interia.pl 1410426801 18883 188.123.220.84 (11 Sep 2014 09:13:21 GMT)
X-Complaints-To: usenet@firma.interia.pl
NNTP-Posting-Date: Thu, 11 Sep 2014 09:13:21 +0000 (UTC)
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko/20100101 Thunderbird/31.1.0
In-Reply-To: <1b7bjz0upmqms.1do58y9wxdi6$.dlg@40tude.net>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit