[ Milan M. Radovic @ 28.08.2010. 15:01 ] @
Molim vas, kako da ukljucim case-sens u MySQL konekciji?

da ova dva upita na primer ne daju isti rezultat:

Code:
SELECT * FROM countries WHERE name='serbia';

Code:
SELECT * FROM countries WHERE name='Serbia';
[ bogdan.kecman @ 28.08.2010. 15:25 ] @
upotrebite binarnu kolaciju, ona je case sensitive
Code:

mysql> select 'ABC' = 'abc';
+---------------+
| 'ABC' = 'abc' |
+---------------+
|             1 | 
+---------------+
1 row in set (0.00 sec)

mysql> select 'ABC' = 'abc' collate latin1_bin ;
+----------------------------------+
| 'ABC' = 'abc' collate latin1_bin |
+----------------------------------+
|                                0 | 
+----------------------------------+
1 row in set (0.00 sec)



COLLATE mozete da koristite kada hocete to samo u nekim slucajevima, ako hocete uvek, samo napravite da su polja koja hocete da pretrazujete case sensitive u kolaciji koja je binarna (ili u _cs kolaciji ... dakle ili *_bin ili *_cs). Dostupne kolacije vidite sa "show collation;"
[ Milan M. Radovic @ 29.08.2010. 12:57 ] @
Znaci moram pri svakom upitu... mogu za npr celu konekciju da stavim COLLATE binarni ili npr na celu bazu ili tabelu?
[ bogdan.kecman @ 29.08.2010. 17:34 ] @
Citat:
Milan M. Radovic: Znaci moram pri svakom upitu... mogu za npr celu konekciju da stavim COLLATE binarni ili npr na celu bazu ili tabelu?


NE, NE, DA

kolacije nemaju nikakve veze sa konekcijom, vezane su za podatke. kolaciju setujete u upitu (to je generalno sporije posto generalno kastujete podatak iz jednog tipa u drugi) ili u samoj tabeli (setujete default za bazu, to nasledjuju tabele ako ne navedete explicitno, setujete za tabelu, to nasledjuju atributi (polja) ako ne navedete explicitno - i setujete na kraju za atribute). Svaki atribut moze da ima razliciti karakter set i razlicitu kolaciju. Obratite paznju da promena "visih instanci" nece propagirati promene na nize. Dakle ako je default kolacija baze utf8_bin i vi imate tu neke kreirane tabela, promenom default kolacije necete promeniti nista na postojecim tabelama, samo ce nove implicitno naslediti tu kolaciju dok ce stare ostati kakve su bile.

dakle kako sam napisao ovde:

Citat:
bogdan.kecman
COLLATE mozete da koristite kada hocete to samo u nekim slucajevima,


Dakle ako vam treba "samo po nekad" onda koristite COLLATE u sql upitu

Citat:
bogdan.kecman:
ako hocete uvek, samo napravite da su polja koja hocete da pretrazujete case sensitive u kolaciji koja je binarna (ili u _cs kolaciji ... dakle ili *_bin ili *_cs)


Dakle ako hocete da ta polja UVEK poredite case sensitive onda postavite kolaciju koja je case sensitive. Na primer:

Code:

mysql> create table t3 (id int auto_increment primary key not null, f1 char(20) character set utf8 collate utf8_general_ci)engine=myisam;
Query OK, 0 rows affected, 2 warnings (0.00 sec)

mysql> create table t4 (id int auto_increment primary key not null, f1 char(20) character set utf8 collate utf8_bin)engine=myisam;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

mysql> insert into t3 (f1) values ('AAA'), ('Aaa'),('aaa');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> insert into t4 (f1) values ('AAA'), ('Aaa'),('aaa');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from t3 where f1='Aaa';
+----+------+
| id | f1   |
+----+------+
|  1 | AAA  | 
|  2 | Aaa  | 
|  3 | aaa  | 
+----+------+
3 rows in set (0.02 sec)

mysql> select * from t4 where f1='Aaa';
+----+------+
| id | f1   |
+----+------+
|  2 | Aaa  | 
+----+------+
1 row in set (0.01 sec)

mysql> select * from t3 where f1='Aaa' collate utf8_bin;
+----+------+
| id | f1   |
+----+------+
|  2 | Aaa  | 
+----+------+
1 row in set (0.00 sec)

mysql> select * from t4 where f1='Aaa' collate utf8_general_ci;
+----+------+
| id | f1   |
+----+------+
|  1 | AAA  | 
|  2 | Aaa  | 
|  3 | aaa  | 
+----+------+
3 rows in set (0.00 sec)


nadam se da je sada bilo dovoljno jasno
[ Shinhan @ 30.08.2010. 07:19 ] @
Ako je polje u tabeli binarno onda će i sortiranje biti case sensitive.
[ Milan M. Radovic @ 30.08.2010. 08:32 ] @
Excelent :) Hvala VAM a LOT! :D:D:D:D