diff --git a/inventory/migrations/0005_alter_sorting_collation.py b/inventory/migrations/0005_alter_sorting_collation.py
new file mode 100644
index 0000000..06ef1c9
--- /dev/null
+++ b/inventory/migrations/0005_alter_sorting_collation.py
@@ -0,0 +1,44 @@
+# Generated by Django 5.1.4 on 2025-01-05 23:09
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('inventory', '0004_alter_default_ordering'),
+    ]
+
+    operations = [
+        migrations.RunSQL("CREATE COLLATION IF NOT EXISTS numeric (provider = icu, locale = 'en@colNumeric=yes');"),
+        migrations.AlterField(
+            model_name='formfactor',
+            name='description',
+            field=models.CharField(db_collation='numeric', max_length=4096),
+        ),
+        migrations.AlterField(
+            model_name='formfactor',
+            name='name',
+            field=models.CharField(db_collation='numeric', max_length=255, unique=True),
+        ),
+        migrations.AlterField(
+            model_name='item',
+            name='description',
+            field=models.CharField(db_collation='numeric', max_length=4096),
+        ),
+        migrations.AlterField(
+            model_name='item',
+            name='name',
+            field=models.TextField(db_collation='numeric', max_length=255),
+        ),
+        migrations.AlterField(
+            model_name='tag',
+            name='description',
+            field=models.CharField(db_collation='numeric', max_length=4096),
+        ),
+        migrations.AlterField(
+            model_name='tag',
+            name='name',
+            field=models.CharField(db_collation='numeric', max_length=255, unique=True),
+        ),
+    ]
diff --git a/inventory/models/form_factor.py b/inventory/models/form_factor.py
index 84c7182..767ada2 100644
--- a/inventory/models/form_factor.py
+++ b/inventory/models/form_factor.py
@@ -2,8 +2,8 @@ from django.db import models
 
 
 class FormFactor(models.Model):
-    name = models.CharField(max_length=255, unique=True)
-    description = models.CharField(max_length=4096)
+    name = models.CharField(max_length=255, unique=True, db_collation="numeric")
+    description = models.CharField(max_length=4096, db_collation="numeric")
 
     icon = models.ImageField(null=True, blank=True)
     datasheet = models.FileField(null=True, blank=True)
diff --git a/inventory/models/item.py b/inventory/models/item.py
index 018df90..96d1bf8 100644
--- a/inventory/models/item.py
+++ b/inventory/models/item.py
@@ -4,8 +4,8 @@ from .container import CanBeContained
 
 
 class Item(CanBeContained):
-    name = models.TextField(max_length=255)
-    description = models.CharField(max_length=4096)
+    name = models.TextField(max_length=255, db_collation="numeric")
+    description = models.CharField(max_length=4096, db_collation="numeric")
     size = models.PositiveIntegerField(default=1, help_text="Number of sub-compartments this item takes up")
     form_factor = models.ForeignKey('inventory.FormFactor', null=True, blank=True, on_delete=models.PROTECT)
     manufacturer = models.ForeignKey('inventory.Manufacturer', null=True, blank=True, on_delete=models.PROTECT)
diff --git a/inventory/models/tag.py b/inventory/models/tag.py
index bf33826..895db0d 100644
--- a/inventory/models/tag.py
+++ b/inventory/models/tag.py
@@ -2,8 +2,8 @@ from django.db import models
 
 
 class Tag(models.Model):
-    name = models.CharField(max_length=255, unique=True)
-    description = models.CharField(max_length=4096)
+    name = models.CharField(max_length=255, unique=True, db_collation="numeric")
+    description = models.CharField(max_length=4096, db_collation="numeric")
     created_at = models.DateTimeField(auto_now_add=True)
     changed_at = models.DateTimeField(auto_now=True)