Toon posts:

[Mysql] Foute collations. Aanpassen veilig?

Pagina: 1
Acties:
  • 807 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hoi,

Ik krijg telkens een foutmelding bij het doen van bepaalde selects op mijn database via PHPMyadmin.

#1267 - Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='

In dit geval was de query "select bla from tablename where ip ='xxx.xxx.xxx.xxx' "

Achtergrondinfo
- Ik heb virtual hosting bij een hoster zonder shell toegang.
- Er draait Mysql 4.1.7, PHPMyadmin 2.6.0-pl3 en Apache 1.3.33 op FreeBSD.

Situatie
Ik krijg de foutmelding alleen vanuit PHPMyadmin. Er worden een hoop selects gedaan vanuit PHP scripts die op de server draaien en die gaan blijkbaar probleemloos. Het probleem lijkt alleen voor te komen als er een WHERE clausule in de query zit en als de query vanuit PHPMyadmin komt. De server verwacht blijkbaar een andere karakterset (utf8?) dan die van mijn query (latin1 swedish?). Daardoor begrijpt-ie misschien het = teken of de 'single quotes' in de query niet.

Op de beginpagina van PHPMyadmin zie ik voor de Mysql server de volgende instellingen staan:

language: English (en-utf8)
Mysql charcterset: UTF-8 Unicode (utf8)
Mysql connection collation: UTF8_general_ci

Op tabelniveau, voor alle tabellen staat de collation op latin1_swedish_ci

Oplossing?
De logische stap lijkt om de collations tussen de mysql server instellingen en de tabel instellingen gelijk te trekken. Moet ik nu de serverinstellingen aan de tabel aanpassen of andersom? Is het uberhaupt veilig en zullen de queries vanaf de site nog werken? Het schijnt een vaker voorkomend probleem te zijn, maar ik durf niet zomaar wat te proberen, want het is een live database van 20+ mb. En dat heen en weer slepen via PHPMyadmin is echt een drama.

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

Voor heen en weer sturen van data in webapplicaties is UTF-8 over het algemeen geschikter dan latin1 (kan veeeeel meer karakters aan, maar op dezelfde met ASCII-compatibele manier als latin1). Ik weet niet hoeveel diakritische tekens je hebt in je tabellen enzo, het zou kunnen dat je die al escaped als ë's enzo hebt opgeslagen? Overigens zou ik zeggen dat MySQL als jij de collation van een tabel verandert keurig alle karakters die dat nodig hebben aanpast.

Over encodings zou je eigenlijk sowieso dit en dit moeten lezen.

[ Voor 19% gewijzigd door djc op 19-06-2005 16:24 ]

Rustacean


  • Mac_Cain13
  • Registratie: Juni 2003
  • Laatst online: 07-04 15:31
Ik heb enige tijd geleden hetzelfde gehad. Alleen waren dat een paar hobby tabelletjes dus heb ik de boel gewoon omgezet naar utf8. Ik had verder helemaal geen problemen met speciale tekens ofzo, alles is netjes omgezet en die nare foutmelding heb ik nooit meer gezien.

Je zou dus alles zo om moeten kunnen zetten. Of je naar latin gaat of juist naar utf8 moet je natuurlijk zelf weten. Dat ligt vooral aan de inhoud van je tabellen en je voorkeuren. Ik zou gewoon een backup maken en ervoor gaan.

[ Voor 11% gewijzigd door Mac_Cain13 op 19-06-2005 16:34 ]


Verwijderd

Topicstarter
Er zitten veel speciale karakters in de tabellen. Het gaat om een forum database. Als er inderdaad problemen kunnen ontstaan met de omzetting dan laat ik het nog even zitten en dan richt ik binnenkort een testomgeving in. Bedankt :)

Verwijderd

Topicstarter
Manuzhai schreef op zondag 19 juni 2005 @ 16:22:
Voor heen en weer sturen van data in webapplicaties is UTF-8 over het algemeen geschikter dan latin1 (kan veeeeel meer karakters aan, maar op dezelfde met ASCII-compatibele manier als latin1). Ik weet niet hoeveel diakritische tekens je hebt in je tabellen enzo, het zou kunnen dat je die al escaped als ë's enzo hebt opgeslagen? Overigens zou ik zeggen dat MySQL als jij de collation van een tabel verandert keurig alle karakters die dat nodig hebben aanpast.

Over encodings zou je eigenlijk sowieso dit en dit moeten lezen.
Toch nog even terugkomen hierop. Het is een erg interessant artikel dat bij joelonsoftware.com. Ik wist niet dat de geschiedenis van karaktersets zo uitgebreid was. Dat andere moet ik nog lezen. Als jij overigens suggereert dat Mysql mijn (speciale) karakters vanzelf omzet naar de nieuwe karakterset, dan wil ik dat wel graag van iemand bevestigd zien. Het zou me in elk geval een hoop gezeur besparen.

Verwijderd

Topicstarter
Ik heb een backup gemaakt en de collatie-instellingen op de beginpagina veranderd. De collation voor de server staat nu op Litin1 swedish en nu slikt-ie mijn queries wel :) Ik heb nu voor zover ik zelf kan inschatten niet de tabellen veranderd, alleen de karakterset die de server verwacht...

In elk geval werkt het. :)
Pagina: 1