Home > Ngoprek > PHP, MSSQL dan Varchar

PHP, MSSQL dan Varchar


Jumpa lagi dalam problematika kustomisasi gila. Isu yang saya angkat kali ini adalah perihal akses varchar MSSQL melalui PHP. Suatu ketika, ketika saya membuat rutin ‘activity logging‘ dimana salah satu field-nya adalah deskripsi atau informasi mengenai aksi yang sedang dilakukan. Deskripsi ini memuat berbagai macam variabel.

Awalnya saya mendefinisikan tipe data untuk field ini berupa varchar(500). Ketika saya tes, script untuk append log berjalan dengan baik, semua data yang disimpan valid. Permasalahan muncul ketika saya membaca field tersebut dan menampilkannya di halaman browser. Beberapa record tidak ditampilkan sebagaimana mestinya, yaitu isi field deskripsi terpotong. Setelah melakukan debugging, ternyata panjang isi field yang terpotong selalu 255 karakter, tidak ada yang lebih. Padahal di database field sudah didefinisikan dengan panjang 500 karakter dan data tersimpan dengan baik. Permasalahan hanya pada rutin pembacaan saja. Aneh.

Ah, tapi untunglah eyang gugel banyak membantu. Usut punya usut hal ini disebabkan karena keterbatasan API yang digunakan PHP untuk mengakses MSSQL (DBLib C) yang membatasi panjang karakter varchar cuma 255 karakter.

Nah problem sudah diketahui, tinggal sekarang solusinya. Ada dua solusi, yaitu:

[1] Gunakan multiple sction
Yaitu memecah satu field menjadi beberapa field pada query sesuai dengan jumlah maksimal karakter yang diinginkan, kemudian menggabungkannya melalui string concatenation di PHP, dalam kasus saya menjadi:

SELECT SUBSTR(LogDescription, 1, 255) AS Desc1, SUBSTR(LogDescription, 256, 245) AS Desc2 ….

$Description = $row[‘Desc1’] . $row[‘Desc2’];

Kelemahan dari cara ini adalah kurang efisien apabila operasi ini sering digunakan, terlebih dengan field yang berbeda – beda.

[2] Ubah tipe data menjadi TEXT
Cara kedua adalah dengan mengubah tipe data varchar menjadi text. Cara ini cukup mudah dan tidak perlu ada pekerjaan tambahan di script PHP nya. Namun cara ini mempunyai kelemahan yaitu tidak dapat digunakan dalam klausul ORDER BY dan GROUP BY.

Akhirnya saya tetap memutuskan untuk menggunakan cara kedua karena lebih mudah dan saya tidak menggunakannya dalam klausul ORDER BY dan GROUP BY. 🙂

Categories: Ngoprek
  1. isman aris
    December 7, 2006 at 6:17 pm

    Sebenarnya hal ini sudah acknowledged agak lama. Kalau nggak salah di masa MSSQL Server versi 7 dimana Microsoft mengendorse konektivitas ke database dilakukan dengan meng-utilize OLEDB/ADO. Penggunaan DAC dengan mengakses langsung file-file dblib DLL sudah dianggap legacy dan memiliki sejumlah kelemahan, salah satunya adalah tidak didukungnya varchar yang > 256 karakter. Ini pernah dimuat dalam situs knowledge base-nya Microsoft.
    Kelihatannya modul koneksi database MSSQL-nya si PHP “terbentur” disitu, tapi tentu saja problem ini tidak spesifik masalahnya PHP 🙂

  1. December 7, 2006 at 6:00 pm

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: