How can I change the 'Postcode' field to work with UK postcodes?
Short answer:

This is a limitation/bug in CiviCRM. The advanced search handles postcodes correctly (ex: I can search postcode ranges H4 to H5), but most reports do not. It would be a feature that needs to be implemented in CiviCRM reports.

Longer answer, if you are a developer:

We could fix it by changing the filter type in the report, but then US-style postal code would lose the ability to search by range. I'm not too sure how to implement that in the report.

Ex: civicrm/CRM/Report/Form.php in function addAddressFields():

    'postal_code' =&gt; array(
      'title' =&gt; ts('Postal Code'),
      'type' =&gt; 1,
      'name' =&gt; 'postal_code',
    ),


Should be:

    'postal_code' =&gt; array(
      'title' =&gt; ts('Postal Code'),
      'type' =&gt; CRM_Utils_Type::T_STRING,
      'name' =&gt; 'postal_code',
    ),


but, as I mentioned, this breaks "search postcode between X and Y". The advanced search has a checkbox to enable "search by range", and it works for UK/Canada-style postcodes, but I'm not sure how to implement this for reports.