mysql + cyr
6 отговора
268 прегледа
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 ?
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 ?
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
Ако 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
:-))
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
if(ASCII(UCASE(TRIM(fldName)))<=192,
ASCII(UCASE(TRIM(fldName)))+127,
ASCII(UCASE(TRIM(fldName)))) as a
from tblNames
order by a
bofh
Re: :-))
??? ?? ???.
??????? ???? ?? where ....
???? ?? ????? ????? ??????? ?? ???????? ???? if
? ? ?? ????? ????? ?? ? TRIM ? ???????
??????? ?????? ? ?????? ?????
?? ?????? ?? ??? ???, ?? cp1251 ? ??-??????? ????????
????? ??? ????? ?? ?? ??????????? ??? ?????? ??????? ?? ?????? ----
Linux is like a wigwam - No Windows, No Gates, Apache inside
??????? ???? ?? where ....
???? ?? ????? ????? ??????? ?? ???????? ???? if
? ? ?? ????? ????? ?? ? TRIM ? ???????
??????? ?????? ? ?????? ?????
?? ?????? ?? ??? ???, ?? cp1251 ? ??-??????? ????????
????? ??? ????? ?? ?? ??????????? ??? ?????? ??????? ?? ?????? ----
Linux is like a wigwam - No Windows, No Gates, Apache inside
Re: mysql + cyr
s latin e .
a kak da si go pusna s cp1251.
klienta moga da go pusna - ama servera-a ?
a kak da si go pusna s cp1251.
klienta moga da go pusna - ama servera-a ?
Re: mysql + cyr
Ами трябва да се компилира наново сървъра
Linux is like a wigwam - No Windows, No Gates, Apache inside
Linux is like a wigwam - No Windows, No Gates, Apache inside