Foutmelding: SQLSTATE[HY000]: General error: 1267 Illegal mix of collations

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ama saril

ama saril

25/07/2013 16:41:56
Quote Anchor link
Ik weet niet of dit een php issue is of een database issue.
Ik voer het volgende stukje script uit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
try
            {
                $dal = new Dal();
                $db = $dal->maakVerbindingSite();
                $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                $sql = "select naam, nummer from tbl_contacts WHERE naam = :naam";                
                $stmt = $db->prepare($sql);
                $stmt->bindParam(':naam', $naam, PDO::PARAM_STR);
                $stmt->execute();    
                $contact = $stmt->fetchAll();
                return $contact;                
            }

            catch(PDOException $e)
            {

                echo '<pre>';
                echo 'Regel: '.$e->getLine().'<br>';
                echo 'Bestand: '.$e->getFile().'<br>';
                echo 'Foutmelding: '.$e->getMessage();
                echo '</pre>';
            }



?>

Het is een redelijk eenvoudige query. Nu wil het geval dat Firefox hier geen problemen mee geeft, maar als ik in IE10 de volgende naam erin schiet : zübli dan geeft hij de volgende melding:
Foutmelding: SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='
(ik roep dit aan met een jquery ajax request en stuur de naam dan mee als parameter)

Nu heb ik deze melding gegoogled en daar wordt verteld dat mijn tabellen allemaal dezelfde collation moeten hebben. Nu heb ik dit gecontroleerd en ze zijn allemaal dezelfde collation dus ik weet eerlijk gezegd niet meer waar ik verder moet gaan zoeken. Ik vindt het ook vreemd dat Firefox dus de melding niet geeft maar IE weer wel.

Heeft iemand enig idee waar ik het moet gaan zoeken? Bedankt!
 
PHP hulp

PHP hulp

06/05/2024 23:22:09
 
Koen Vlaswinkel

Koen Vlaswinkel

25/07/2013 16:47:55
Quote Anchor link
Is de databaseverbinding ook dezelfde collatie? Zet dat in je connection string, dus zoiets als "mysql:host=localhost;dbname=test;charset=utf8"
 
Kris Peeters

Kris Peeters

25/07/2013 16:56:53
Quote Anchor link
Dat klinkt dus als een probleem van ANSI (1 byte per karakter) <-> Unicode (2 bit per karakter).


Dan is de code die je postte waarschijnlijk niet de plek waar het misloopt.
Staan al je database tables in "CHARACTER SET utf8 COLLATE utf8_unicode_ci" ?

Als dat het geval is, zorg dan ook dat je dit in je broncode hebt staan:

<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />

Misschien helpt het; ik garandeer niets
 
Ama saril

ama saril

25/07/2013 17:47:48
Quote Anchor link
De verbindingsstring staat als volgt:
$db = new PDO('mysql:host=localhost;dbname=****', '****', '****',array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
dus dat moet wel goed zijn denk ik.

De collatie staat als:
latin1_swedish_ci bij elke tabel ik zal het proberen naar utf8_unicode_ci om te zetten.
Ik laat morgen wel weten of het is gelukt :)
 
Erwin H

Erwin H

25/07/2013 18:00:57
Quote Anchor link
Maak wel een backup voor je die collatie omzet.... het kan nare bijwerkingen hebben....
 



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.