Linux за българи: Форуми

Програмиране => Web development => Темата е започната от: sunhater в Apr 10, 2006, 17:55



Титла: Кирилица в mysql 3.23.59
Публикувано от: sunhater в Apr 10, 2006, 17:55
Проблема ми е, че когато има кирилица в базата, при SELECT заявка с ORDER BY не ми подрежда редовете по азбучен ред... Има ли лек (без ъпдейт на MySQL)?

MySQL 3.23.59
FreeBSD 4.8


Титла: Кирилица в mysql 3.23.59
Публикувано от: rat в Apr 10, 2006, 20:20
До колкото си спомням има лек .
Трябва да сложиш в my.cnf нщо от сорта на
server-encoding=windows-1251

Провери в документацията за точния синтаксис.


Титла: Кирилица в mysql 3.23.59
Публикувано от: в Apr 10, 2006, 20:45
аз ползвам mysql-3.23.49-3 и имах същия проблем.
това е моят конфиг
cat my.cnf

Примерен код

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
default-character-set=cp1251

[mysql.server]
user=mysql
basedir=/var/lib

[safe_mysqld]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid



Обаче има една Излючителна важна подробност!!! Ако имаш Index  (от преди да добавиш default-character-set=cp1251) към някое поле на кирилица, ще продължава да връща неправилно сортиране. или само на пръв поглед ще изглежда, че е правилно. например може да работи правилно с първите 'абв', обаче някъде към 'ч' ще се обърка.

Ако забележиш такова поведение трябва да дропнеш индеха и да го създадеш отново.


Титла: Кирилица в mysql 3.23.59
Публикувано от: sunhater в Apr 12, 2006, 11:46
Лошото е, че нямам root права и ще трябва да моля админа да редактира конфиг файла. Иначе базата няма индекси. Благодаря за отговорите.





Титла: Кирилица в mysql 3.23.59
Публикувано от: rat в Apr 13, 2006, 10:36
Сле дкато си стигнал до админа по-добре да го помолиш да мине на mysql-4.1.x
Лошото е че като си промениш конфига така няма да ти работо коректно сортирането на Latin1 :(
В новите версии на mysql проблема е решен доста добре. МОжеш да указваш colation на всяка база/колона от таблицата/таблица.


Титла: Кирилица в mysql 3.23.59
Публикувано от: nov_chovek в Apr 17, 2006, 17:01
Ако щете вярвайте, но отворих форума преди малко ,за да попитам за точно същия въпрос, за който е съдадена тази тема, мерси при мен стана :))


Титла: Кирилица в mysql 3.23.59
Публикувано от: VladSun в Apr 17, 2006, 22:37
Аз този проблем го реших временно чрез:
Примерен код
order by BINARY






Титла: Кирилица в mysql 3.23.59
Публикувано от: Naka в Apr 21, 2006, 11:51
Относно съществуващ Index към кирилско поле от преди да се зададе кодова таблица. Намерих си документацията и past-вам тук. На някой може да му е от полза за в бъдеще.

Mysql дава два начина за поправяне на индех. 1-вия е от външна команда
myisamchk -r -q --set-character-set=cp1251 word_index
но е недостатък че ще промени всички индехи и БАЗАТА трябва ДА Е СПРЯНА. не го ползвайте.
2.-рия е чрез конзолата на Mysql: DROP INDEX - CREATE INDEX и е напълно безопасен.

например:
таблицата се казва : word_index
полето се казва: word
и индеха се казва: word


Примерен код

CREATE TABLE word_index (
id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
word VARCHAR(32) NOT NULL,
KEY word (word)
);
 
#povreden(neprawilen) index sled smiana na kodowata tablica
# QUICK - will try to do a REPAIR of only the index tree
# syshtoto kato: myisamchk -r -q --set-character-set=cp1251 word_index

1.вариант (недостатък  трябва да е спряна DB и ! ще промени всички index-и в таблицата  
myisamchk -r -q --set-character-set=cp1251 word_index

2.вараинт (за препоръчване. само там където има кирилица)
DROP INDEX word on word_index;
CREATE INDEX word on word_index (word);