simple MySQL Search
6 отговора
257 прегледа
simple MySQL Search
Imate li predstava kakav e problema, kogato search-vam v tablica na mysql, koiato sadarja zapisi na cyrillic-a?
pri izpolzvaneto na tazi funkcia polu4avam nekorektni rezultati:
$result = mysql_query("select * from db where lower(some1) like lower('$text%') or lower(some2) like lower('$text%')") or die (mysql_error());
Naprimer tursia za zapis zapo4va6t s kirilsko "L" (Л) , a kato rezultat se polu4avat i zapisi zapo4va6ti s kirilsko "E" i "A" i t.n.
pri izpolzvaneto na tazi funkcia polu4avam nekorektni rezultati:
$result = mysql_query("select * from db where lower(some1) like lower('$text%') or lower(some2) like lower('$text%')") or die (mysql_error());
Naprimer tursia za zapis zapo4va6t s kirilsko "L" (Л) , a kato rezultat se polu4avat i zapisi zapo4va6ti s kirilsko "E" i "A" i t.n.
Re: simple MySQL Search
mysql> show variables like 'char%'
| character_set | cp1251
mysql> select fname from users where fname like 'л%';
+---------+
| fname |
+---------+
| Любомир |
| Любомир |
| Любо |
| Лилия |
Това достатъчно ли е?
mysql.online.bg/documentation/mysql/bychapter/manual_MySQL_Database_Administration.html#Character_sets
За повече информация
Нямаш нужда от lower()
SQL по принцип е case-insensitive
в MySQL
CHAR, VARCHAR и TEXT са case insensitive освен ако изрично ги дефинираш с BINARY или ако в SELECT ги викаш като BINARY(col)
mysql> select fname from users where binary(fname) like 'л%';
Empty set (0.01 sec)
|mysql> select fname from users where binary(fname) like 'Л%';
+---------+
| fname |
+---------+
| Любомир |
...
Linux is like a wigwam - No Windows, No Gates, Apache inside
| character_set | cp1251
mysql> select fname from users where fname like 'л%';
+---------+
| fname |
+---------+
| Любомир |
| Любомир |
| Любо |
| Лилия |
Това достатъчно ли е?
mysql.online.bg/documentation/mysql/bychapter/manual_MySQL_Database_Administration.html#Character_sets
За повече информация
Нямаш нужда от lower()
SQL по принцип е case-insensitive
в MySQL
CHAR, VARCHAR и TEXT са case insensitive освен ако изрично ги дефинираш с BINARY или ако в SELECT ги викаш като BINARY(col)
mysql> select fname from users where binary(fname) like 'л%';
Empty set (0.01 sec)
|mysql> select fname from users where binary(fname) like 'Л%';
+---------+
| fname |
+---------+
| Любомир |
...
Linux is like a wigwam - No Windows, No Gates, Apache inside
Re: simple MySQL Search
Thanx Mnogo ! Sega 6te probvam...
A 6te e problem li ako pri tozi charset ima i latinski zapisi?
A 6te e problem li ako pri tozi charset ima i latinski zapisi?
Редактирано от Pravets8M на
Re: simple MySQL Search
Ти как мислиш
Естествено, че няма.
cp1251 е най-благодатен в това отношение. Всички букви са подредени по възходящ ред на кодовете. Просто трябва софтуера да пратръпне да работи с 8 битово ASCII а не само 7 битово
Linux is like a wigwam - No Windows, No Gates, Apache inside
Естествено, че няма.
cp1251 е най-благодатен в това отношение. Всички букви са подредени по възходящ ред на кодовете. Просто трябва софтуера да пратръпне да работи с 8 битово ASCII а не само 7 битово
Linux is like a wigwam - No Windows, No Gates, Apache inside
Re: simple MySQL Search
Sorry za malko tapia vaproa no tozi charset koga, kade i kak da go setvam?
Редактирано от Pravets8M на
Re: simple MySQL Search
Ми аз понеже:
1. Съм българче
2. Компилирам MySQL винаги от .tar.gz
го слагам още в
./configure --with-charset=cp1251 ...
Иначе може да се смени и в движение ако е компилиран.
mysql> show variables like 'char%';
character_set | cp1251 |
| character_sets | cp1251 dec8 dos german1 hp8 koi8_ru latin1 latin2 swe7 usa7 danish hebrew win1251 estonia hungarian koi8_ukr win1251ukr greek win1250 croat cp1257 latin5 |
примерно...
т.е. стартирам mysqld с cp1251 по default, а ако много ми трябва някой друг ..
има и опции при стартиране:
--default-character-set=charset
ОБАЧЕ!!!
Има някои уговорки
1. Всички таблици в една база данни трябва да са с един и същ charset
2. Всяка таблица която е създадена с друг charset трабва да се преиндексира
myisamchk има опция:
--set-character-set=name
Change the character set used by the index
Та процедурата би трябвало да изглежда така:
Спираш mysqld
Пускаш го с 1251
За всяка таблица правиш
REPAIR TABLE tbl;
Или още преди да го пуснеш минаваш с mysamchk
Linux is like a wigwam - No Windows, No Gates, Apache inside
1. Съм българче
2. Компилирам MySQL винаги от .tar.gz
го слагам още в
./configure --with-charset=cp1251 ...
Иначе може да се смени и в движение ако е компилиран.
mysql> show variables like 'char%';
character_set | cp1251 |
| character_sets | cp1251 dec8 dos german1 hp8 koi8_ru latin1 latin2 swe7 usa7 danish hebrew win1251 estonia hungarian koi8_ukr win1251ukr greek win1250 croat cp1257 latin5 |
примерно...
т.е. стартирам mysqld с cp1251 по default, а ако много ми трябва някой друг ..
има и опции при стартиране:
--default-character-set=charset
ОБАЧЕ!!!
Има някои уговорки
1. Всички таблици в една база данни трябва да са с един и същ charset
2. Всяка таблица която е създадена с друг charset трабва да се преиндексира
myisamchk има опция:
--set-character-set=name
Change the character set used by the index
Та процедурата би трябвало да изглежда така:
Спираш mysqld
Пускаш го с 1251
За всяка таблица правиш
REPAIR TABLE tbl;
Или още преди да го пуснеш минаваш с mysamchk
Linux is like a wigwam - No Windows, No Gates, Apache inside
Re: simple MySQL Search
Мерси за информацията. Сега ще видя какво мога да направя.
Тук проблемите са няколко: MySQL-a e под Win98 (това едва ли е проблем), а и цялото приложение май ще трябва да върви и на друго място.
Тук проблемите са няколко: MySQL-a e под Win98 (това едва ли е проблем), а и цялото приложение май ще трябва да върви и на друго място.