--- mapogcfilter.h	2008-04-15 17:39:09.000000000 +0200
+++ mapogcfilter.h	2009-07-03 10:52:34.000000000 +0200
@@ -111,7 +111,7 @@
                           int iLayerIndex);
 
 MS_DLL_EXPORT char *FLTGetSQLExpression(FilterEncodingNode *psFilterNode,layerObj *lp);
-MS_DLL_EXPORT char *FLTGetBinaryComparisonSQLExpresssion(FilterEncodingNode *psFilterNode);
+MS_DLL_EXPORT char *FLTGetBinaryComparisonSQLExpresssion(FilterEncodingNode *psFilterNode, layerObj *lp);
 MS_DLL_EXPORT char *FLTGetIsBetweenComparisonSQLExpresssion(FilterEncodingNode *psFilterNode);
 MS_DLL_EXPORT char *FLTGetIsLikeComparisonSQLExpression(FilterEncodingNode *psFilterNode,
                                        int connectiontype);
--- mapogcfilter.c	2009-06-29 13:06:06.000000000 +0200
+++ mapogcfilter.c	2009-07-03 11:24:44.000000000 +0200
@@ -2789,7 +2789,7 @@
                     (*(int *)psFilterNode->psRightNode->pOther) = 1;
                 }
                 pszExpression = 
-                  FLTGetBinaryComparisonSQLExpresssion(psFilterNode);
+                  FLTGetBinaryComparisonSQLExpresssion(psFilterNode, lp);
             }            
             else if (strcasecmp(psFilterNode->pszValue, 
                                 "PropertyIsBetween") == 0)
@@ -3234,11 +3234,12 @@
 /*                                                                      */
 /*      Return the expression for a binary comparison filter node.      */
 /************************************************************************/
-char *FLTGetBinaryComparisonSQLExpresssion(FilterEncodingNode *psFilterNode)
+char *FLTGetBinaryComparisonSQLExpresssion(FilterEncodingNode *psFilterNode, layerObj *lp)
 {
     char szBuffer[1024];
     int i=0, bString=0, nLenght = 0;
     char szTmp[100];
+    char szTmp2[100];
 
     szBuffer[0] = '\0';
     if (!psFilterNode || !
@@ -3270,6 +3271,11 @@
     if (psFilterNode->psRightNode->pszValue == NULL)
       bString = 1;
       
+    sprintf(szTmp2, "%s_type",  psFilterNode->psLeftNode->pszValue);
+    if (msOWSLookupMetadata(&(lp->metadata), "G", szTmp2) != NULL &&
+      (strcasecmp(msOWSLookupMetadata(&(lp->metadata), "G", szTmp2), "Character") == 0))
+        bString = 1;
+
     /*opening bracket*/
     strcat(szBuffer, " (");
 
