MySQL Decimal, Double, Float Rounding Problem

When importing CSV with decimal values to MySQL, the numbers are rounded. I have searched on google but didn’t find a solution so I have come up with my own.

In CSV file decimal part is seperated with a comma “,” , however MySQL accepts a dot “.”.
So just replace commas with dots in your CSV file. That easy 😉


sed -i 's/,/./g' your_file.csv

Mysql Veri Tiplerinde Length Parametresi

MySql veri tipleri hakkındaki bir yanlışımı az önce öğrendim ve bir çok kişinin de bu konuyu yanlış bildiğini düşünüyorum.

Bildiğiniz gibi char, varchar, tinyint, int, bigint gibi veri tiplerinin hepsi length (size veya uzunluk olarak da geçer) parametresi alır. char ve varchar tipleri için bu değeri tanımladığınız zaman, tanımlanan değer kadar karakter saklanır. Örnek olarak varchar(3) olarak tanımlarsak saklanan değerler aşağıdaki gibi olabilir;

  • abc
  • tef
  • ağa

Doğal olarak int(3) değeri için de saklanacak değerin -999 ve 999 arasında olabileceği aklımıza geliyor. Halbuki int(3)’ün sakladığı değer (4 byte) değişmiyor. Değişen tek şey verinin gösterim uzunluğu oluyor. Yani kayıt ettiğiniz int değeri veritabanında yine 4 byte kaplarken yalnızca sayının 3 hanesi gösteriliyor.

Peki o zaman uzunluk tanımlamanın ne faydası var. Eğer uzun tanımlarsanız; sayısal tipler için tanımlanan uzunluk değeri, zerofill (sıfırla doldur) özelliği ile birlikte kullanıldığında aşağıdaki gibi getirilir. (Aşağıdaki örnek int(4) için verilmiştir.)

  • 0005
  • 0004
  • 0011

Kaynaklar:
http://dev.mysql.com/doc/refman/5.0/en/numeric-type-attributes.html
http://dev.mysql.com/doc/refman/5.0/en/integer-types.html

MySql Connection Refused 111 Çözümü

Farkli istemcilerin ve sunucuların iletişim halinde olduğu bir projemi geliştirirken 3 farklı bilgisayardan oluşan bir test ortamı hazırladım. MySql Server bu bilgisayarlardan birisinde kuruluydu ve bu veritabanına diğer bir bilgisayarın erişim sağlaması gerekiyordu. İlk defa standart kurulumda 111 hatası aldım ve kısa bir arama sonucuna config dosyasında bulunan bir satırın güvenlik sağlamak amacıyla MySql bağlantısına sadece yerel ağ da izin vermesinin buna sebep olduğunu buldum.

Sorunu gidermek için /etc/mysql/my.cnf dosyasını açıp “bind-address = 127.0.0.1” satırını silmeniz gerekiyor veya güvenlikten ödün vermemek için bağlantı yapacak bilgisyarların ip adreslerini de tanımlayabilirsiniz.

Config dosyasındaki değişiklikten sonra her zamanki gibi “sudo service mysql restart” 🙂

MySQL 'ORDER BY FIELD'

Ünlü bir televizyon kanalı için hazırladığım internet sitesinde yayın akışını sıralamaya çalışırken bir an duraksadım. Yayın akışını basit bir ‘ORDER BY’ ile listelemek mümkün olmadı. Gazetelerin yayın akışı bölümlerinden de hatırlayacağınız gibi günün başlangıcı saat 7, 8 oluyor ve sıralama gece yarısına doğru devam ediyor. Kısa bir araştırmadan sonra ORDER BY FIELD özelliğini buldum ve başladım denemelere.
Continue reading MySQL 'ORDER BY FIELD'