ugrás a tartalomhoz

MySQL/utf-8, rendezés (ORDER BY...)

laji · 2006. Jan. 11. (Sze), 09.51
Az uw-n van MySQL adattáram, tele cirill betűkkel (orosz szöveg). Látszik jól, rákereshető jól. Viszont: lekérdezéskor a sorrend (ORDER BY...) rossz - az orosz ábécé az uw-s MySQL szerint k-val kezdődik, majd a "já" (az utolsó cirill betű) után a-val folytatódik i-ig: K>JÁ, majd A-I.

Az adattár, a táblák és az oszlopok utf-8-ra vannak állítva, sorrendezés (COLLATE...) utf8_general_ci-re. Kipróbáltam az utf8_bin és utf8_unicode_ci-t is, nem segít. Az oszlopok nincsenek kettes számrendszerre állítva (BINARY).

Próbálkoztam s SET NAMES paranccsal, de az csak a bevitelre/kiolvasásra vonatkozik, a sorbarendezésre nem.

Feltételezem, hogy ez nem csak a cirill betűk esetében számít. Ha valaki utf-8-at használ magyar szöveghez, s ott ugyanilyen rossz lesz a rendezés, akkor az ő és ű betűk pl. az ábécé végére kerülhetnek (gondolom).

Valakinek ötlete?
 
1

<Nincs cím>

laji · 2006. Jan. 11. (Sze), 10.25
Kifelejtettem, de talán kihatással lehet rá. Az uw keretrendszerbe helyezi az oldalamat, s annak viszont iso-8859-2 a beállítása (nem tudom megváltoztatni).
Üdv: laji
2

Cirill szöveg

Poetro · 2006. Jan. 11. (Sze), 12.54
Ha cirill szöveget jelenítesz meg akkor miért nem az annak megfelelő charset-tel teszed? Ezek:
Content-Type: text/html; charset=koi8-r
Content-Type: text/html; charset=windows-1251
Content-Type: text/html; charset=x-mac-cyrillic
Content-Type: text/html; charset=cp866
Content-Type: text/html; charset=iso-8859-5

Fontos lehet, hogy a collacation (egybevetés) típusát pedig a szöveg típusának megfelelően adod meg, akár lekérdezés szinten, akár globálisan.
SELECT szintjén:

SELECT k COLLATE latin2_hungarian_ci AS k1
FROM t1
ORDER BY k1;
Orosz nyelv esetén a koi8u-at javaslom.
--------
Poetro
4

<Nincs cím>

laji · 2006. Jan. 11. (Sze), 13.00
Azért kell az utf-8-at használnom, mert magyar szöveg is van benne, meg egy csomó egyéb betű csehből, franciából, stb.

De ez a SELECT mellé helyezett COLLATE nagyon megkapott, erről nem tudtam - ki is próbálom.

Apróság, csak ezt épp tudom: a koi8-u az ukránhoz való, az oroszhoz a koi8-r kell. Levelezésnél általában azt használják az oroszok (tehát koi8-r), a honlapjaik viszont legtöbbször windows-1251-re íródnak.
Üdv: laji
6

Bocs

Poetro · 2006. Jan. 11. (Sze), 13.25
Nem teljesen tudom, hogy az orosz nyelvű szövegek mi fán teremnek, ABC-t se láttam még oroszul. Szüval biztosan igazad van.
--------
Poetro
7

<Nincs cím>

laji · 2006. Jan. 11. (Sze), 14.06
SELECT/COLLATE megoldás: űgy tűnik, nyerő lesz! Most próbálom végig.
Üdv: laji
12

Valami már alakul...

laji · 2006. Jan. 11. (Sze), 20.17
Már megörültem, ugyanis a javasolt SELECT... eljárással tényleg jó lesz a sorrend. Kezdtem volna azt boncolgatni, hogy néz ki ez a szerkezet többszintű rendezéssel (ORDER BY k1, k2, k3 DESC...), mikor észrevettem: jó ugyan a rendezés, DE a lekérdezéssel a k1 oszlop tényleges értékei helyett "1" értékeket kaptam az összes sor esetében. (Talán a "TRUE" akar lenni?) Mit kéne másképp csinálni?

Hab a tortán, amit közben vettem észre: még a nagybetű/kisbetűre való közös rákeresés sem működik, pedig hát alapjáraton a SELECT erre nem érzékeny.

Üdv: laji
9

meif

mefi · 2006. Jan. 11. (Sze), 15.47
Az UltraWeb keretrendszere az alábbi kód <head>-be való beillesztésével megszüntethető:

if(window.top!=window.self){window.top.location=document.location}

üdv:
mefi
http://mefi.be
10

Már nem...

laji · 2006. Jan. 11. (Sze), 19.13
Sajnos, már nem - csiki-csukit játszik :).

Üdv: laji
3

show collation

Balogh Tibor · 2006. Jan. 11. (Sze), 12.55
Nézd meg, hogy a

  SHOW COLLATION LIKE 'utf8%';
utasítás milyen eredményt ad, vállasz valami használhatóbbat. Kifejezetten orosz összevetést nem találtam utf8 kódoláshoz. Talán a utf8_lithuanian_ci segíthet.
5

<Nincs cím>

laji · 2006. Jan. 11. (Sze), 13.13
Külön orosz rendezés tényleg nincs az utf-8-hoz. Viszont, mielőtt feltettem az uw-hoz, a saját gépemen kifogástalanul futott az utf8_general_ci beállítással (a gépemen: WinXpSP2, Apache, php4, MySQL5). Valahol olvastam, hogy azt szánták az oroszhoz is, utf-8 esetében.
Egyébként mint említettem, kipróbáltam az utf8_bin és utf8_unicode_ci rendezéseket is. Mind rossz volt, de más-más módon rendezett. Megnézem a litvánt is.

Üdv: laji
8

MySql verzió?

Balogh Tibor · 2006. Jan. 11. (Sze), 14.36
Igaz, nekem a gépemen itthon (ahol működik a rendezés) MySQL-5 van, az uw-nál pedig csak 4
Melyik verzió, 4.0.x vagy 4.1.x?
Az előbbi, ha jól emlékszem, nem támogatja a utf8 kódolást.

Ha az utóbbi, akkor biztosnak kell lenned benne, hogy a táblában tényleg utf8 kódolású szöveg van. Az, hogy a tábla character set-je utf8, csak azt garantálja, hogy a DBMS annak fogja tekinteni az adatokat.
11

Űgy tűnik, mással van gond

laji · 2006. Jan. 11. (Sze), 20.10
UW: MySQL 4.1.15-Debian_1-log
Egyébként a lapom elején ki kell írnom:
<?php
header("Content-Type: text/html; charset=utf-8");
?>
...különben rosszul jelennek meg a betűk. Ebből arra következtetek, hogy a táblában az adatok valóban ténylegesen utf-8 alakban vannak. S a txt állomány, amivel bevittem a táblába az adatokat, szintén utf-8 alakú volt. Sajnos azt nem tudom, hogyan tudnám magát a táblát leellenőrizni ilyen szempontból, de a fentiek alapján úgy tűnik, nem ez a gond.

Üdv: laji

(Utólagos megjegyzésem: tévedtem, mégsem voltak utf-8 alakban a bevitt adatok - a SET NAMES kellett ahhoz is...)
13

Megoldódott: set names utf8

laji · 2006. Jan. 12. (Cs), 07.39
Sikerült. Mégiscsak az kellett, amivel a legelején próbálkoztam (talán akkor helytelenül vittem be?): minden MySQL kapcsolatfelvétel után ki kellett adni a parancsot: set names utf8.
<?php
$betukeszlet=mysql_query("set names utf8", $kapcsolatom) or die(mysql_error());
?>
Mindenkinek köszönöm a segítséget!

Üdv: laji