[MySQL 4.1] Fout in query

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb twee tabellen, een met gebruikersgegevens, met gebruikersID als unieke sleutel en een tabel met account-rechten. Als ik nu de volgende query pak:
code:
1
2
3
SELECT ga.userlevel, gr.gebruikersnaam, gr.password
FROM gip_accounts ga, gebruikersrechten gr
WHERE gr.gebruikersnaam = 'rogier'

Dan krijg ik de volgende foutmelding:
code:
1
2
#1267 - Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and
(utf8_general_ci,COERCIBLE) for operation '='
Raar, want deze query heeft altijd gewerkt volgens mij. Kan dit iets te maken hebben met een versie-update van MySQL? Ik ben namelijk van 3 naar 4.1 gegaan. Zoeken levert wenig resultaten. Het probleem is wel enigszins bekend, maar een oplossing voor deze query kan ik echter niet vinden.

[ Voor 4% gewijzigd door Verwijderd op 15-12-2004 22:30 . Reden: Typefouten verwijderd ]


Acties:
  • 0 Henk 'm!

  • ronaldmathies
  • Registratie: Juni 2001
  • Niet online
Wat ik een beetje vreemd vindt is dat er geen join is tussen gebruikersrechten en gip_accounts.

3015 Wp-z 5360 Wp-nno op 2 x SMA-SB3600 TL-21, Warmtepomp: ERSC-VM2CR2 / PUHZ-SHW140 YHA, WTW Q350, EV Kia Ev6 GT-Line


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Sorry, om te debuggen had ik de query een beetje veranderd (had ik erbij moeten vertellen). Dit is de volledige query:
code:
1
2
3
4
$sql = "SELECT ga.userlevel, gr.gebruikersnaam, gr.password
FROM gip_accounts ga, gebruikersrechten gr
WHERE ga.gebruikers_id = gr.gebruikersrechten_id
AND gr.gebruikersnaam = '".$_SESSION['username']."'";

Acties:
  • 0 Henk 'm!

Verwijderd

Hij geeft toch vrij duidelijk aan wat het probleem is? Het zit 'm in de karakterset.

gr.gebruikersnaam is blijkbaar in latin1_swedish_ci,IMPLICIT en .$_SESSION['username'] in utf8_general_ci,COERCIBLE.

Acties:
  • 0 Henk 'm!

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 21-09 12:54
Klopt, je query kan helemaal 100% correct zijn maar..... Sinds MySQL 4 (.1?) is er een leuke functionaliteit aan toegevoegd en dat is dat text velden, varchars enzo, nu ook specifiek van een bepaalde encoding kunnen zijn.

Standaart staat die ingesteld op latin1_swedish. Maar over het algemeen is de string die je invoert gewoon utf8 (utf8_general_ci ). Dus moet die encoding van het veld in de DB ook utf8 zijn, anders krijg je dus die error.

Zo heb ik mijn tabellen overgezet naar utf8_general_ci. Dit moet je volgens mij wel specifiek aangeven als je je db gaat aanmaken.

Collation heet dat geloof ik.

Ik heb mijn tabellen als volgt opnieuw aangemaakt:
code:
1
2
3
4
5
CREATE TABLE `type` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `name` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


Doordat je tabel het charset utf8 heeft wordt die automatisch overgenomen door de velden, maar je kunt ook per veld een charset opgeven. Maar dit werkt tenminste voor mij.

[ Voor 10% gewijzigd door Sybr_E-N op 15-12-2004 22:50 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Maar kan ik de query ook zo aanpassen dat mysql 'denkt' dat er 'invoer' binnenkomrt van het type 'latin1_swedish_ci,IMPLICIT' ? Dus dat die sessie-waarden gezien worden als hetzelfde type collation?

Acties:
  • 0 Henk 'm!

Verwijderd

http://dev.mysql.com/doc/mysql/en/Character_sets.html
You can change the character set with the --default-character-set option when you start the server.
Is makkelijker.. en anders:

http://nl2.php.net/strtr

[ Voor 16% gewijzigd door Verwijderd op 15-12-2004 23:20 ]

Pagina: 1