diff --git a/app/factory.py b/app/factory.py
index 66b20c2b002327c774308a35a6db274b48c1dca3..ea0ca8ddcc9f58a3420554d7710d30febe05caab 100644
--- a/app/factory.py
+++ b/app/factory.py
@@ -25,6 +25,7 @@ def register_cli(app):
     @app.cli.command()
     def initdb():
         """Create the database tables and initialize them with default values"""
+        db.engine.execute('CREATE EXTENSION IF NOT EXISTS citext')
         db.create_all()
         for instance in defaults:
             db.session.add(instance)
diff --git a/app/models.py b/app/models.py
index 727b66eef8803fd416d75482cdf543c8e4bef112..01107becda6dec06b4488384aa4a87a257746384 100644
--- a/app/models.py
+++ b/app/models.py
@@ -13,6 +13,7 @@ import uuid
 import qrcode
 from sqlalchemy.types import TypeDecorator, CHAR
 from sqlalchemy.dialects.postgresql import UUID
+from citext import CIText
 from flask_login import UserMixin
 from .extensions import db, login_manager, ldap_manager
 from . import utils
@@ -126,7 +127,7 @@ class User(db.Model, UserMixin):
 
 class QRCodeMixin:
     id = db.Column(db.Integer, primary_key=True)
-    name = db.Column(db.String(50), nullable=False, unique=True)
+    name = db.Column(CIText, nullable=False, unique=True)
 
     def image(self):
         """Return a QRCode image to identify a record
diff --git a/environment.yml b/environment.yml
index 20d4c15e256531af7d466c2b3f95603047569bad..c2a7f72c55836346414354d55eea37ec7e5d3a0e 100644
--- a/environment.yml
+++ b/environment.yml
@@ -56,4 +56,5 @@ dependencies:
   - ldap3==2.2.4
   - pyasn1==0.2.3
   - pyjwt==1.4.2
+  - sqlalchemy-citext==1.3.post0
   - visitor==0.1.3