10 December 2010

Cannot Resolve Collation Conflict For Equal To Operation

Kemaren sempet dimintai data, sebuah permintaan yang tidak biasanya sehingga perlu akses langsung ke database. Gak ada cara lain kecuali menggunakan Query untuk mengambil datanya. Sialnya begitu menjalankan query SQL Server menolak menjalankannya. Bener-bener Server nakal padahal query-nya cukup sederhana, dia malah bilang "Cannot resolve collation conflict for equal to operation". Usut punya usut ternyata karena collation pada field yang diperbandingkan tidak sama alias memiliki collation yang berbeda. Inilah penjelasannya.

Di Microsoft SQL Server, collation dapat di set sampai pada lever kolom suatu tabel. Ketika membandingkan dua kolom yang memiliki collation berbeda pada sebuah query maka pesan error seperti diatas akan muncul. Contohnya begini.

SELECT ID
FROM ItemsTable
INNER JOIN AccountsTable
WHERE ItemsTable.Collation1Col = AccountsTable.Collation2Col

Jika kolom ItemsTable.CollationCol dan AccountsTable.Collation2Col memiliki collation yang berbeda, maka ketika query tersebut dieksekusi pesan "Cannot resolve collation conflict for equal to operation" akan muncul.

Untuk menyelesaikan konflik collation tambahkan kata kunci disekitar operator sama dengan (=).

SELECT ID
FROM ItemsTable
INNER JOIN AccountsTable
WHERE ItemsTable.Collation1Col COLLATE DATABASE_DEFAULT
= AccountsTable.Collation2Col COLLATE DATABASE_DEFAULT

Collation dapat berefek pada area berikut ini.
1. Klausa Where
2. Predikat Join
3. Fungsi
4. Database

Reference : http://blog.sqlauthority.com