Χρήση Ελληνικών σε MySQL

Θέματα web + mobile design, development & cyberculture.

Χρήση Ελληνικών σε MySQL

Δημοσίευσηαπό mentos » 14.04.06, 4:50 pm

Επειδή είδα ότι αναφέρθηκε το θέμα σε προηγούμενο ποστ ήθελα να ρωτήσω κάτι μιάς και με απασχολεί τις τελευταίες μέρες. Αυτό που θα ρωτίσω δεν το έχω ψάξει ακόμα (λόγο φόρτου εργασίας :roll: ) αλλά άμα κάποιος από εσάς ξέρει θα με βοηθούσε αρκετά. Λοιπόν:

έστω ότι δέν έχω δυνατότα να ρυθμίσω το encoding στην βάση μου και καταχωρώ τα στοιχεία μου σε αυτή τη μορφή:

Αθλητικά - > Αθλητικά

πώς γίνεται μετά να τραβήξω κάτι με PHP σε αλφαβητική σειρά; αυτή τη στιγμή όταν το κάνω αυτό πέρνω αυτό εδώ:

· Μεταλλειολόγοι
· Υαλότουβλα
· Υγρομονώση
· Σκαλωσιές
· Υλικά στέγης
· Σκυρόδεμα έτοιμο

ότινάνε δηλαδη. Δοκίμασα να το κάνω με την εντολή που είπε ο Leo σε άλλο ποστ αλλα τίποτα... :?

ξέρετε καμία λύση; :roll:
Άβαταρ μέλους
mentos
Senior Member
 
Posts: 748
Εγγραφή: 27.10.05, 5:32 pm
Τοποθεσία: Βύρωνας, Αθήνα

Re: Χρήση Ελληνικών σε MySQL

Δημοσίευσηαπό delinquent_hobbit » 14.04.06, 10:46 pm

mentos έγραψε:Επειδή είδα ότι αναφέρθηκε το θέμα σε προηγούμενο ποστ ήθελα να ρωτήσω κάτι μιάς και με απασχολεί τις τελευταίες μέρες. Αυτό που θα ρωτίσω δεν το έχω ψάξει ακόμα (λόγο φόρτου εργασίας :roll: ) αλλά άμα κάποιος από εσάς ξέρει θα με βοηθούσε αρκετά. Λοιπόν:

έστω ότι δέν έχω δυνατότα να ρυθμίσω το encoding στην βάση μου και καταχωρώ τα στοιχεία μου σε αυτή τη μορφή:

Αθλητικά - > Αθλητικά

πώς γίνεται μετά να τραβήξω κάτι με PHP σε αλφαβητική σειρά; αυτή τη στιγμή όταν το κάνω αυτό πέρνω αυτό εδώ:

· Μεταλλειολόγοι
· Υαλότουβλα
· Υγρομονώση
· Σκαλωσιές
· Υλικά στέγης
· Σκυρόδεμα έτοιμο

ότινάνε δηλαδη. Δοκίμασα να το κάνω με την εντολή που είπε ο Leo σε άλλο ποστ αλλα τίποτα... :?

ξέρετε καμία λύση; :roll:

E pes mas more kai kana stixio parapano...
Pia version ine i vasi ?
ti charset exi default i vasi
ti charset exi to table
ti charset exi to column ?
mipos ine diaforetika ?
mipos i vasi ine 3.23 kai pedevese adika ?
&Alpha;&theta;&lambda;&eta;&tau;&iota;&kappa;ά <-- afta pos to kseris oti apothikevonte etsi ? Esi ta metatrepis se HTML entities ? ti
ine afto to field ? varchar ?
dokimases na valis tin php na sou pi ti encoding
mpeni sto query kai ti encoding vgeni ?(mb_detect_encoding)
Ine polla pou mporoun na pan strava alla an i mysql ine < 4.1
kata pasa sigouria (sic) ftaii i vasi kai den mporis na kanis tipota (ektos apo upgrade)
pantos an ine liga entries stin vasi mporis na kanis sorting
sto kodika sou kai na voleftis etsi...
Pantos den sto sinisto giati ligo traffic parapano na exis tha
gonatisi to site an ektelite sinexia.

Afta................
delinquent_hobbit
Member
 
Posts: 27
Εγγραφή: 08.04.06, 9:27 pm

Δημοσίευσηαπό leo » 15.04.06, 1:04 am

Καλησπέρα,
Για να δουλέψει σωστά το order by, σε έκδοση 3.23, πρέπει να αλλάξεις το default character set στο my.cnf
Κώδικας: Επιλογή όλων
[mysqld]
default-character-set=greek

Έτσι όλα τα queries θα τρέχουν με ταξινόμηση greek.

Για να δουλέψει σωστά σε έκδοση 4.1+ τρέχεις το εξής ερώτημα:
Κώδικας: Επιλογή όλων
SELECT * FROM table ORDER BY name COLLATE greek_general_ci


Τώρα αν έχεις mysql 3.23 και δεν σκοπεύεις να την αναβαθμίσεις μπορείς με διάφορες μπακαλίστικες μεθόδους να κάνεις τη δουλειά σου.
π.χ. μπορείς να προσθέσεις ένα πεδίο integer στον πίνακά σου, να δώσεις τις τιμές 1,2,3,4,5 .... όπως θέλεις να ταξινομηθούν, και μετά να το κάνεις order by.
π.χ.

Κώδικας: Επιλογή όλων
title                      sort
--------------------------------
· Μεταλλειολόγοι    1
· Υαλότουβλα       4
· Υγρομονώση        5
· Σκαλωσιές         2
· Υλικά στέγης         6
· Σκυρόδεμα έτοιμο     3

SELECT * FROM table ORDER by sort;

έτσι θα πάρεις το αποτέλεσμα που θες.
Για να καταλάβεις το πρόβλημα ρίξε μια ματιά εδώ
Λεωνίδας
null
Άβαταρ μέλους
leo
Member
 
Posts: 174
Εγγραφή: 08.07.05, 7:31 am
Τοποθεσία: Athens

Δημοσίευσηαπό notis » 15.04.06, 11:05 am

Τα διαβαζω ολα αυτα περι mysql και ειλικρινα δεν ξερω τι να υποθεσω!
Μαλλον ειμαι απο τους τυχερους που δεν εχουν κανενα προβλημα με την mysql και τα ελληνικα.
Ακου enconding της αρκουδας για να καταχωρησω ενα ΑΘΛΗΤΙΚΑ! :shock:

Λοιπον, εχω στον τοπικο μου server mysql 3.23.49 και στον online server mysql 4.1.13
Στον τοπικο κανω export απο phpMyAdmin 2.5.5-pl1
Στον αλλο server εκτελω το sql αρχειο σε phpMyAdmin 2.6.4-pl2
Η μονη διαφορα ειναι πως επιλεγω Character set of the file: Latin1

Ολα δουλευουν τελεια στα ελληνικα με αυτο τον τροπο!
Το μονο προβλημα που εχω ειναι οταν θελω να παρω πισω την ελληνικη βαση απο phpMyAdmin 2.6.4-pl2 και mysql 4.1.13
Ολα κινεζικα!!!
Ερχεται ομως εδω Η ΛΥΣΗ!
Εχω εγκατεστημενη και την παλια εκδοση του phpMyAdmin 2.5.5-pl1 οπου αν και παραμενει ιδια η mysql (4.1.13) τα ελληνικα μου ερχονται λουλουδι!
Άβαταρ μέλους
notis
Master Admin
 
Posts: 3697
Εγγραφή: 23.02.04, 1:36 pm
Τοποθεσία: Corinth

Δημοσίευσηαπό cpulse » 15.04.06, 1:41 pm

Μπορεί να αλλάξει το encoding και χωρίς το κεντρικό configuration του my.cnf με τις

SET NAMES 'charset_name'
SET CHARACTER SET charset_name

δες http://dev.mysql.com/doc/mysql/en/Chars ... ction.html

Επίσης υπάρχει διαφορά στο mysql_escape_string() και mysql_real_escape_string() (δουλεύει μόνο σε PHP 4.3.0 και πάνω)

Μάλιστα παλιότερα θυμάμαι ότι είχα διαβάσει κάπου στο php.net ότι το mysql_escape_string() είχε πρόβλημα ειδικά με τα ελληνικά.

Χάος... πάντως και τα sort αμφιβάλλω αν λειτουργούν σωστά με τις σωστές γραμματοσειρές γιατί για παράδειγμα μπορεί να βάζουν το ά ποιο κάτω από το ω γιατί έχει τόνο. (δεν τα έχω ελέγξει, απλά λειτουργεί η ζωηρή μου φαντασία)

Για κάποια search scripts που χρειάστηκε να κάνω κάποτε είχα φτιάξει δικά μου normalization tables και όλα δούλευαν ρολόι .. πχ..

$a = array(
'α' => 'A', // λατινικό A
'ά' => 'A',
'Α' => 'A',
'Ά' => 'A',
'β' => 'B',
....
);

Η MySQL μπορεί εύκολα να κάνει sort με τις κανονικοποιημένες (normalized) εκδόσεις μιας φράσης.
/* code == fun */
Άβαταρ μέλους
cpulse
Senior Member
 
Posts: 848
Εγγραφή: 03.04.06, 11:42 pm

Δημοσίευσηαπό leo » 15.04.06, 2:53 pm

cpulse έγραψε:Μπορεί να αλλάξει το encoding και χωρίς το κεντρικό configuration του my.cnf με τις

SET NAMES 'charset_name'
SET CHARACTER SET charset_name

δες http://dev.mysql.com/doc/mysql/en/Chars ... ction.html

Όπως αναφέρω παραπάνω, στην έδοση MySQL 3.23 δεν μπορεί να αλλάξει το endoding με τις παραπάνω εντολές.
Οι παραπάνω εντολές ισχύουν για εκδόσεις 4.1+
null
Άβαταρ μέλους
leo
Member
 
Posts: 174
Εγγραφή: 08.07.05, 7:31 am
Τοποθεσία: Athens

Δημοσίευσηαπό cpulse » 15.04.06, 5:24 pm

leo νομίζω το είπες σε άλλο thread, το οποίο το είδα κι εγώ μετά.
Πάλι καλά δεν χρειάστηκε να τα χρησιμοποιήσω ποτέ αυτά γι αυτό δεν τα γνωρίζω σε βάθος.
/* code == fun */
Άβαταρ μέλους
cpulse
Senior Member
 
Posts: 848
Εγγραφή: 03.04.06, 11:42 pm

Δημοσίευσηαπό mentos » 16.04.06, 9:31 pm

παιδία μήπως να το μεταφέραμε εδω: Web Programming + OpenSource Technologies που κολάει πιο πολυ να κρατήσουμε και την τάξη; Εικόνα

:lol: :roll:
Άβαταρ μέλους
mentos
Senior Member
 
Posts: 748
Εγγραφή: 27.10.05, 5:32 pm
Τοποθεσία: Βύρωνας, Αθήνα


Επιστροφή στο II.I Ιστοσχεδίαση + Mobile + Διαδίκτυο

Μέλη σε σύνδεση

Μέλη σε αυτή την Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 5 επισκέπτες

Visual Communication Designers Club

Το Visual Communication Designers Club, το μεγαλύτερο Ελληνικό online design forum, αποτελεί μια Ελληνική κοινότητα σχεδιαστών οπτικής επικοινωνίας, υπό την ευρύτερη έννοια του όρου, θέλοντας να συμπεριλάβει στα μέλη της κάθε ειδικότητα και βαθμίδα όσων σπουδάζουν ή εργάζονται στον χώρο της επικοινωνίας, έντυπης, διαδικτυακής, τρισδιάστατης ή εφαρμογών πολυμέσων