X-Original-To: pgsql-performance-postgresql.org@localhost.postgresql.org Received: from localhost (mx1.hub.org [200.46.208.251]) by postgresql.org (Postfix) with ESMTP id 955F49FA3AD for ; Wed, 7 Jun 2006 16:58:49 -0300 (ADT) Received: from postgresql.org ([200.46.204.71]) by localhost (mx1.hub.org [200.46.208.251]) (amavisd-new, port 10024) with ESMTP id 70534-02 for ; Wed, 7 Jun 2006 16:58:44 -0300 (ADT) X-Greylist: delayed 00:31:06.430331 by SQLgrey- Received: from lara.cc.fer.hr (lara.cc.fer.hr [161.53.72.113]) by postgresql.org (Postfix) with ESMTP id 014C49FA2E6 for ; Wed, 7 Jun 2006 16:58:43 -0300 (ADT) Received: from [127.0.0.1] (localhost.cc.fer.hr [127.0.0.1]) by lara.cc.fer.hr (8.13.6/8.13.4) with ESMTP id k57JQIfw021055 for ; Wed, 7 Jun 2006 21:26:23 +0200 (CEST) (envelope-from ivoras@fer.hr) Message-ID: <4487285A.5050104@fer.hr> Date: Wed, 07 Jun 2006 21:26:18 +0200 From: Ivan Voras User-Agent: Mozilla Thunderbird 1.0.6 (X11/20050921) X-Accept-Language: en-us, en MIME-Version: 1.0 To: pgsql-performance@postgresql.org Subject: Curious sorting puzzle Content-Type: text/plain; charset=ISO-8859-2; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: Maia Mailguard 1.0.1 X-Archive-Number: 200606/78 X-Sequence-Number: 19435 The situation is this: we're using a varchar column to store alphanumeric codes which are by themselves 7-bit clean. But we are operating under a locale which has its own special collation rules, and is also utf-8 encoded. Recently we've discovered a serious "d'oh!"-type bug which we tracked down to the fact that when we sort by this column the collation respects locale sorting rules, which is messing up other parts of the application. The question is: what is the most efficient way to solve this problem (the required operation is to sort data using binary "collation" - i.e. compare byte by byte)? Since this field gets queried a lot it must have an index. Some of the possible solutions we thought of are: replacing the varchar type with numeric and do magical transcoding (bad, needs changes thoughout the application) and inserting spaces after every character (not as bad, but still requires modifying both the application and the data). An ideal solution would be to have a "not-locale-affected-varchar" field type :)