mysql + cyr

6 отговора 268 прегледа
#1

mysql + cyr

zdr.
imam slednata situaciq:
select id,contact_name from contacts where contact_name like "м%"
м - e malka bukva m na kirilica !
+----+---------------------------+
| id | contact_name |
+----+---------------------------+
| 1 | IBM |
| 2 | IBM1 |
| 9 | Министерство на икономика |
+----+---------------------------+
????????????????????????
zashto mi vrushta takuv rezultat ?

Отговор
в отговор на newbie #2

Re: mysql + cyr

Ами провери ASCII кодовете и ще схванеш логиката.
Ако mysql-а е подкаран само с Latin т.е. 7-битово ASCII точно подобен ефект трябва да се очаква - махаш старшия бит и ...

Ето какво се случва при мен:
mysql> select * from contacts;
+------+-----------------------------+
| id | contact_name |
+------+-----------------------------+
| 1 | IBM |
| 2 | IBM1 |
| 3 | Министерство на икономиката |
+------+-----------------------------+
3 rows in set (0.00 sec)

mysql> select * from contacts where contact_name like 'м%';
+------+-----------------------------+
| id | contact_name |
+------+-----------------------------+
| 3 | Министерство на икономиката |
+------+-----------------------------+
1 row in set (0.01 sec)

mysql> select * from contacts where contact_name like 'М%';
+------+-----------------------------+
| id | contact_name |
+------+-----------------------------+
| 3 | Министерство на икономиката |
+------+-----------------------------+
1 row in set (0.00 sec)


Подробността:
mysql> show variables like 'char%';

| character_set | cp1251

Е понеже съм българин винаги си подкарвам mysql със cp1251

И накрая един малък съвет.
Ако често ще търсиш по първа буква:

mysql> alter table contacts add key(contact_name(1));

MySQL поддържа индескиране по префикс. В случая първа буква. съответно индексът става много по-малък и много по-бърз отколкото ако индексираш целия char
m

Linux is like a wigwam - No Windows, No Gates, Apache inside
Отговор
в отговор на salle #3

:-))

select fldName as name,
if(ASCII(UCASE(TRIM(fldName)))<=192,
ASCII(UCASE(TRIM(fldName)))+127,
ASCII(UCASE(TRIM(fldName)))) as a
from tblNames
order by a

bofh
Отговор
в отговор на bofh #4

Re: :-))

??? ?? ???.
??????? ???? ?? where ....
???? ?? ????? ????? ??????? ?? ???????? ???? if
? ? ?? ????? ????? ?? ? TRIM ? ???????
??????? ?????? ? ?????? ?????

?? ?????? ?? ??? ???, ?? cp1251 ? ??-??????? ????????
????? ??? ????? ?? ?? ??????????? ??? ?????? ??????? ?? ?????? ----

Linux is like a wigwam - No Windows, No Gates, Apache inside
Отговор
в отговор на salle #5

mryn

salle ne se chete

bofh
Отговор
в отговор на salle #6

Re: mysql + cyr

s latin e .
a kak da si go pusna s cp1251.
klienta moga da go pusna - ama servera-a ?

Отговор
в отговор на newbie #7

Re: mysql + cyr

Ами трябва да се компилира наново сървъра

Linux is like a wigwam - No Windows, No Gates, Apache inside
Отговор