Δεν προσπαθώ να υπερασπιστώ το λειτουργικό, απλά σου λέω ότι το πρόβλημα σου δεν έχει να κάνει με το λειτουργικό. Τα Windows είναι Unicode by default, internally και πρέπει να δουλέψεις για να γυρίσεις σε ASCII. Επίσης, οι γλώσσες του .NET και η Java είναι και αυτές Unicode by default. Λειτουργικό και γλώσσες δουλεύουν με unicode χωρίς να κάνεις τίποτε ιδιαίτερο, απλά γράφοντας ένα string. H MySQL και η Python δεν είναι unicode by default και γι αυτό πρέπει να ορίζεις encodings και να αναρωτιέσαι πότε έγινε το σωστό και πότε όχι.
To UTF8 ΔΕΝ είναι το codepage της ελληνικής. Το Unicode δεν έχει συγκεκριμένα codepages ανά γλώσσα, εξάλλου φτιάχτηκε για να απαλλαγούμε από τα codepages. Άσε που δεν έχει και όφελος για τα ελληνικά καθώς τα ελληνικά strings χρειάζονται δύο bytes ανά χαρακτήρα, όπως και το UTF16/UCS2.
Επίσης, στις περισσότερες βάσεις (Oracle, SQL Server, DB2) αλλά και στο SQL Standard υπάρχει διαχωρισμός μεταξύ απλού CHAR και National CHAR το οποίο κατά κανόνα είναι Unicode (στην Informix παίζει αλλιώς). Η MySQL δεν έχει national char τύπους και γι αυτό χρησιμοποιεί το UTF8 λες και είναι άλλο ένα ANSI encoding. Αν δεν φροντίσεις να χειριστείς τα string που σου επιστρέφει σωστά μπορείς άνετα να αποθηκεύσεις λάθος encoding εκεί μέσα και δεν θα το καταλάβεις μέχρι να το δει ο χρήστης.
Μια και λες ότι δουλεύει σε άλλα λειτουργικά ... είσαι τυχερός που κανείς δεν έριξε λάθος strings. Έχουν γίνει αρκετές ερωτήσεις εδώ στο παρελθόν για κείμενα τα οποία ήταν ελληνικά στο ξεκίνημα και κατέληξαν κινέζικα στο τέλος. Αν ξεχάσεις να κάνεις π.χ. escape τα string που διαβάζεις στην python τα ελληνικά θα φτάσουν πίσω ως ANSI και όχι UTF8. Μην ξεχνάς, το default της python είναι το ANSI και όχι το UTF8. Σου φάνηκε ότι δεν υπάρχει πρόβλημα γιατί έτυχε το τερματικό ή η σελίδα εισαγωγής των δεδομένων να είναι UTF8 οπότε τα δεδομένα έφτασαν χωρίς πρόβλημα στη βάση. Αν δεν ίσχυε αυτό, θα έβλεπες κινέζικα.
Η διαφορά είναι ότι ενώ στα Windows, τις περισσότερες βάσεις και τη Java υπάρχει ειδικός χειρισμός για unicode και αυτόματες μετατροπές ή ειδοποιήσεις όταν υπάρχει conversion από/σε ASCII, στο συνδυασμό Python/MySQL βασίζεσαι μόνο στα default encodings και στο ότι writer και reader θα έχουν το ίδιο encoding. Με άλλα λόγια, είναι λες και γράφεις ακόμα σε DOS ...
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos