MySQL

23 отговора 1090 прегледа
#1

MySQL

MySQL LIKE
Pi6a si az select * from table_name where col_name like 'A%'
i mi vra6ta rezultati zapo4va6ti osven s bukva 'a' i s drugi bukvi.

Bazata mi e na kirilitza, probvax da pi6a bukvata i na kirilitza i na latinitza, rezultata e ednakav.
I s drugi bukvi - sa6to

Ni6to ne razbiram, ne triabva da e taka

Mnogo 6te se radvam, ako niakoi moje da mi pomogne

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

Re: MySQL

Предиката LIKE на MySQL не е чувствителен към големи и малки букви.
Проблема се решава с оператора BINARY.

[линк]

__________________________________
Пътят към ада е осеян с добри намерения
Отговор
в отговор на ..:: StanProg ::.. #3

я хубаво прочети въпроса....

трябва да дълбаеш в настройките на операционната система и самия MySql....само, че къде точно идея нямам...
и аз бях забелязал преди време подобно нещо, ама реших че сам съм си виновен....
иначе отговора се съдържа във въпроса - MySql - нищо не плащаш нищо не получаваш...))

я опитай тая таблица да я сортираш по поле, в което има кирилица...тогава какво мазало става....

Отговор
в отговор на Topбaлaн #4

Re: я хубаво прочети въпроса....

Мисля, че отговора на въпроса е точно това BINARY, затова дадох този линк.
Вярно е, че MySQL не е SQL Server още повече Oracle, но си има своите достойнства и не бива да се пренебрегва. Що се отнася до сортиране по поле в което има крилица, решението е пак BINARY(проблема е като горния).

Лек ден.

__________________________________
Пътят към ада е осеян с добри намерения
Отговор
в отговор на ..:: StanProg ::.. #5

Re: я хубаво прочети въпроса....

Moje bi triabva6e da spomena, 4e izpolzvam MySQL pod Windows98.
Osven tova malko se samniavam, 4e problema ima ne6to ob6to s malkite i golemite bukvi, no 6te probvam.

Blagodaria za saveta.

Drug problem, koito iznikna mejduvremenno - iskam da se izvedat samo zapisite, koito sa s max stoinost, a se izvejdat i ostanalite.

Редактирано от nevidimata на

Отговор
в отговор на nevidimata #6

Re: я хубаво прочети въпроса....

Ако "iskam da se izvedat samo zapisite, koito sa s max stoinost" означава, че искаш да изведеш N на брой записа като ги сортираш по големина в намаляващ ред:

SELECT * FROM mytable ORDER by myfield DESC LIMIT N;

Ако не съм те разбрал правилно, поясни се щото не си много ясен/ясна.

__________________________________
Пътят към ада е осеян с добри намерения
Отговор
в отговор на nevidimata #7

Re: MySQL

не съм 100% сигурен, че така ставаше, но може да погледнеш [линк] за подробности

един вид като стартираш сървера да му добавиш на командния ред --default-character-set=cp1251 имаше начин и в my.cnf-то

там пише, че за съществуващи вече бази е добре да се направи myisamchk -r -q

Отговор
в отговор на ..:: StanProg ::.. #8

Re: я хубаво прочети въпроса....

Ami mai napisax -> select col_name1, max(col_name2) as max from table_name group by col_name1

Редактирано от nevidimata на

Отговор
в отговор на ..:: StanProg ::.. #9

Re: я хубаво прочети въпроса....

когато напишеш WHERE pole1 LIKE '%A%' трябва да ти връща само резултати започващи с "А" или "а" не трябва да има резултати започващи с ДРУГИ БУКВИ.

никой никъде не се е оплаквал от малки и големи букви....

когато сортираш по колона, трябва да я сортира по АЗБУЧЕН ред, а не по случаен....обяснението с кодовата таблица, което даде някой преди мен е логично, и ако работи - добре....

Отговор
в отговор на nevidimata #10

MySQЛ sort cp1251

Във файла my.ini се добавя:
[mysqld]
character-sets-dir=c:/mysql/share/charsets (тук се настройва спрямо вашата инсталация)
default-character-set = cp1251

Това е достатъчно за да работи сортирането на кирилицата без проблеми

Редактирано от Borko на

Отговор
в отговор на Borko #11

това вече е .......

смислен отговор!

предполагам не само сортирането а и филтрирането ще работи....

Отговор
в отговор на Borko #12

Re: MySQЛ sort cp1251

Страхотно! Това бачка!


Отговор
в отговор на Borko #13

Re: MySQЛ sort cp1251

Za sajalenie az ne moga da se poxvalia kato K - pri men tova ne6to xi4 ne ba4ka, t.e. izob6to ne promenia ne6tata

Отговор
в отговор на nevidimata #14

ти очевидно

имаш някакъв много сериозен проблем. Принципно BINARY /*както каза Стан*/ винаги работи перфектно. Независимо windows или не, главните и малките букви имат различно аски представяне, сиреч различен двоичен код.
Или рещо бъркаш със заявката /*т.е. не достига до сървъра, както си я постнала*/ или просто базата ти не е в ред. Това не зависи от конфигурационния файл.
Откъде издаваш заявката, от клиентската програма mysql ли?

The things are always changing, I feel that it`s allright

Отговор
в отговор на voyager #15

Re: ти очевидно

Zaiavkata ia zadavam 4rez php i 4rez phpMyadmin i 4rez MySQL - vse edno i sa6to stava.

Отговор
в отговор на nevidimata #16

Re: ти очевидно

a napravi li si poleto BINARY vse pak? taka i ne kazva6? kakva e taq tvoqta misti4na baza danni. Ima6 li create izrazite, da probvame i nie?

дао дъ дзин

Отговор
в отговор на nevidimata #17

vsi4ko e nared

Ami opravix se ve4e, vsi4ko tragna.
S binary-to mai stana, iavno predi ne6to sam propusnala

Mnogo blagodaria na vsi4ki


Редактирано от nevidimata на

Отговор
в отговор на nevidimata #18

Re: vsi4ko e nared ...

Извинявам се за късното включване, но все пак проблема е изцяло в променливата character_set

mysql> show variables like 'char%';

Ще ти даде повече информация

BINARY просто прави сравненията Case-Sensitive

или на български казано при BINARY има разлика между главни и малки букви.
в контекста на текущия character-set


character_set влияе върху LIKE, ORDER BY, UPPER, LOWER
тъй, че погледни отново какво са ти отговорили phpGuru и Borko с две дребни добавки:

1. Като смениш character_set (а и всяка друга промелнива в my.cnf) трябва все пак да рестартираш mysqld

2. Задължително пусни myisamchk или REPAIR TABLE за всяка таблица която има индексирано поле на кирилица.

salle.online.bg/sig
Отговор
в отговор на salle #19

Re: vsi4ko e nared ...

Виж сега salle,

1. В моя my.cnf не съм настройвал никакъв character-set и всичко що е кирилица работи. Работи сравняването, сортирането и т.н. Нямам никакви проблеми с това.

2. Що се отнася до BINARY, то мога да кажа, че може да се използва и за чувствителност към главни и малки букви, но основнвта му задача е да накара mysql-а да интерпретира отделните символи на стринговете бинарно. Чувствителността е следствие на това интерпретиране.

Вярно е, че в големите буквари пише само за това case-sensitivity, но това е така понеже повечето автори на книги не са се сблъсквали с кирилицата.

Не се съмнявам, че е полезно да се задава character-set, но до сега не ми е било нужно.

__________________________________
Пътят към ада е осеян с добри намерения
Отговор
в отговор на ..:: StanProg ::.. #20

Re: BINARY

Дай да се разберем за какво говорим

1. name BINARY char(16) -> select ... order by name;
2. name char(16) -> select ... order by BINARY name;
3. name char(16) -> select ... where BINARY name = 'Гошо';
4. name char(16) -> select ... where name = BINARY 'Гошо';

Работата е там, че cp1251 е адски удобна кодова таблица от гледна точка на програмиране .... знаеш защо. Просто е подредена.

Не така стоят нещата с другите кодови таблици като latin2 и така нататък.

Заради пробата - пусни едно

mysql> show variables like 'char%'; и кажи какви кодови таблици имаш компилирани

salle.online.bg/sig
Отговор