query_params & collatie

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

01/07/2016 16:36:07
Quote Anchor link
Hoi,

Voor MySQLi heb ik een eigen query_params() in de steigers, maar er gaat nog iets mis bij het uitvoeren er van, ik krijg dan een melding in PHP als volgt:
Quote:
Illegal mix of collations (utf8mb4_unicode_ci,COERCIBLE) and (utf8mb4_general_ci,COERCIBLE) for operation '='

Mijn uitdaging is om te achterhalen hoe dat komt. De melding verdwijnt en data verschijnt:
1. als ik
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$this->oMySQLi->query("SET collation_connection = 'utf8mb4_unicode_ci'");
weglaat, maar ik wil die juist op unicode hebben staan
2. in een niet geparametriseerde query, maar da's niet handig
3. als ik in de query zelf "?" vervang voor "COLLATE utf8mb4_unicode_ci = ?"

Die laatste is het meest veelzeggend, want ik vergelijk de inhoud van "?" met een MySQL functie die een kolom (utf8mb4_unicode_ci) als inpunt heeft, maar kennelijk als uitvoer utf8mb4_general_ci heeft. Waar stel je dat in?
Zowel collation_connection, collation_database, als collation_server staan op utf8mb4_unicode_ci, net als de server, de database, de tabellen en alle tekstkolommen. Ik gebruik netjes set_charset() om de character-set in te stellen, op dat niveau zit het hem niet denk ik.

Als ik de functie weglaat en alleen de kolom noem dan blijft de foutmelding ook afwezig.
Ik vrees dat het gaat om deze MySQL bug: https://bugs.mysql.com/bug.php?id=24690
Gefixed voor 6 (mysql 5.6?) echter op het systeem dat ik gebruik draait MariaDB 5.5.49.
Echter in het changelog staat in 2010 "Pushed into 5.5.3-m3", dus ik vermoed dat het toch iets anders moet zijn?

Heeft imand een behulpzame suggestie?
Gewijzigd op 01/07/2016 16:47:23 door
 
Er zijn nog geen reacties op dit bericht.



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.