django versus mysql: karakter seti problemleri
bildiğiniz üzere mysql varsayılan olarak “latin1_swedish_ci” karakter setiyle geliyor. django ise, her yerde – hemen hemen her yerde değil, her yerde- unicode kullanıyor.
modellerinizi yazdıktan sonra “python manage.py syncdb” yapıp, tablolar yaratıldıktan sonra “süper kullanıcı” girmek isterseniz, standart bir mySQL kurulumunda (ubuntu gnu/linux) aşağıdaki hatayı alıyorsunuz:
... Warning: Incorrect string value: '\xC4\xB1nc\xC4\xB1...' for column 'name' at row 1
django, her şeyi her yerde unicode kullanmasına rağmen, mysql’de tabloları yaratırken karakter seti olarak utf8_*_ci belirtmiyor. hatta belirtmek de istemiyor buradaki hata girdisinde görebileceğiniz üzere. O kısım, mysql sunucunun standart ayarlarıyla çalışıyor. (Django’nun “it is not a bug, it is a feature!” anlayışını sorgulamaya başladım son zamanlarda.)
her neyse, sorunun çözümü basit. mysql sunucusunu standart olarak utf8 ile çalışacak şekilde ayarlamanız gerekiyor. ubuntu için (ve bir çok linux dağıtımı için) root yetkileriyle aşağıdaki yolu takip edebilirsiniz:
/etc/mysql/conf.d/ dizini içine charset.cnf şeklinde bir dosya açın ve içine aşağıdakileri girin ve kaydedin.
[mysqld] default-character-set=utf8 default-collation=utf8_general_ci character-set-server=utf8 collation-server=utf8_general_ci init_connect=’SET collation_connection = utf8_general_ci’ init_connect=’SET NAMES utf8′ skip-character-set-client-handshake
uyarı: uzattığınız dosyanın uzantısı kesinlikle .cnf olmaılıdır. mysql, sadece .cnf uzantılı dosyaları dikkate alıyor.
mysql sunucusunu yeniden başlatın:
/etc/init.d/mysql restartsorun kalmayacaktır