Versio

hoofdletter gevoelig?

Overzicht Reageren

Merijn Venema

Merijn Venema

05/02/2011 03:34:38
Quote Anchor link
Beste leden,

Kan het kloppen dat een mysql equals operator niet kijkt naar hoofdletters?

Een simpele test:

Users:
id, username
1, merijn

Nu de query:
SELECT * FROM users WHERE username = 'Merijn'

Geeft gewoon 1 rij terug. Kan iemand dit bevestigen en wellicht een oplossing geven?

Met vriendelijke groet,
Merijn

Toevoeging op 05/02/2011 03:41:56:

Sorry voor de bump, ben er achter, stond niet op Binary ingesteld.
 
PHP hulp

PHP hulp

24/05/2012 21:36:48
Gesponsorde koppelingen:
BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  
 
Martijn B

Martijn B

05/02/2011 11:04:55
Quote Anchor link
Dat heeft met de collation van je tabel te maken.

Quote:
A collation is a set of rules for comparing characters in a character set.


Zie: http://dev.mysql.com/doc/refman/5.1/en/charset-general.html

Zie ook : http://dev.mysql.com/doc/refman/5.1/en/charset-mysql.html

Dat "_ci" staat dus voor niet hoofdletter gevoelig.

Quote:
Sorry voor de bump, ben er achter, stond niet op Binary ingesteld.


Binary heeft volgens de meeste eenvoudige collation daar worden karaters binair met elkaar vergeleken. Dan is 'a' binair anders dan 'A', dus hoofdletter gevoelig.
Gewijzigd op 05/02/2011 11:11:22 door Martijn B
 
Merijn Venema

Merijn Venema

05/02/2011 14:20:28
Quote Anchor link
Jep ben er achter, de default charset staat op swedish_ci waar ci staat voor: Case Insensitive. Volgende de mysql Docs hoort een _bin charset wel hoofdletter gevoelig te zijn maar ook hier klopt iets niet helemaal.

Stel ik heb een user account met "Merijn" en ik wil later een account toevoegen "merijn", dan krijg ik alsnog de error dat de naam al in gebruik is. Oftewel, case insensitive. Het geldt dus ook voor het aanmelden. Ik kan gewoon nog aanmelden met "merijn" op het user account "Merijn". Behoorlijk frustrerend omdat ik geen duidelijke oplossing vinden kan.

Overigens, de default charset is nu: utf8_bin
 
Jelmer rrrr

Jelmer rrrr

05/02/2011 15:05:39
Quote Anchor link
En de charset van de tabel? Volgens mij kan je in mysql per tabel de charset definiƫren.
 
Merijn Venema

Merijn Venema

05/02/2011 15:16:09
Quote Anchor link
Alles staat nu op _bin. Zowel de tabellen alsook de database. Ik heb de tabellen geflushed en opnieuw opgebouwd om te kijken of het uitmaakt, maar het werkt niet. Erg vervelend, waarschijnlijk zie ik iets over het hoofd. Maar wat, dat weet ik dan weer niet.
 
Martijn B

Martijn B

05/02/2011 15:45:17
Quote Anchor link
Ik heb een tabel gemaakt en op de kolom naam zit een unieke index.

De tabel:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
CREATE TABLE test (

  id int( 10 ) unsigned NOT NULL auto_increment,
  naam varchar( 255 ) NOT NULL default '',
  
  PRIMARY KEY ( id ),
  UNIQUE INDEX u1 ( naam )
  
) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;


Ik heb er 2 gebruikers in gezet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
INSERT INTO `test`.`test` (
`id` ,
`naam`
)
VALUES (
NULL , 'martijn'
), (
NULL , 'Martijn'
);


Als ik nog een gebruiker 'martijn' toevoeg dan krijg ik uiteraard een error.

Ik heb een selectie gedaan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT *
FROM `test`
WHERE naam = 'martijn'
LIMIT 0 , 30


En zoals verwacht kwam er 1 gebruiker uit namelijk 'martijn'.
Dit alles gedaan in phpMyAdmin 3.1 en de 'MySQL verbindingscollatie' op 'utf8_bin'.
 
Merijn Venema

Merijn Venema

05/02/2011 15:59:19
Quote Anchor link
Dat klopt, maar ik ga m`n database niet opnieuw creeren om zodoende alles op utf8 te krijgen. Naar het * schijnt * staat alles op utf_bin, maar ik ben er achter gekomen dat elk individueel veld ook nog een charset mee krijgt. Een simpele query om alle velden ook UTF8 te maken, leverde het volgende op:

id , username
1 , merijn

SELECT * FROM users WHERE username = 'merijn' // levert 1 ( true )
SELECT * FROM users WHERE username = 'Merijn' // levert 0 ( false )

Conclusie: alle velden moeten zelf ook nog weer geencode worden naar de goede charset. Best handig om te weten, dom dat ik niet in het begin alles op utf8 heb gezet. Fout die niet snel gemaakt wordt nu :)
 



Overzicht Reageren

Get Adobe Flash player