Index: regressiontests/model_regress/models.py
===================================================================
--- regressiontests/model_regress/models.py	(revision 8231)
+++ regressiontests/model_regress/models.py	(working copy)
@@ -32,6 +32,13 @@
 class Event(models.Model):
     when = models.DateTimeField()
 
+# #7789
+class Julian(models.Model):
+    name = models.CharField(max_length=20, unique=True)
+
+class Julian2(models.Model):
+    slug = models.SlugField(unique=True)
+    
 __test__ = {'API_TESTS': """
 (NOTE: Part of the regression test here is merely parsing the model
 declaration. The verbose_name, in particular, did not always work.)
@@ -87,5 +94,37 @@
 datetime.datetime(2000, 1, 1, 13, 1, 1)
 >>> e.get_previous_by_when().when
 datetime.datetime(2000, 1, 1, 6, 1, 1)
+
+
+# #7789 MySQL case-insensitive unique constraints
+# The follwing tests require that settings.TEST_DATABASE_CHARSET
+# is set to 'utf8' for mysql.
+>>> Julian.objects.get_or_create(name='Julian')[1]
+True
+>>> n, c = Julian.objects.get_or_create(name='julian')
+>>> c
+True
+>>> n.name
+'julian'
+>>> Julian2.objects.get_or_create(slug='Julian')[1]
+True
+>>> n, c = Julian2.objects.get_or_create(slug=u'julian')
+>>> c
+True
+>>> n.slug
+u'julian'
+>>> n, c = Julian.objects.get_or_create(name=u'\xf6')
+>>> c
+True
+>>> n.name == u'\xf6'
+True
+>>> n, c = Julian.objects.get_or_create(name=u'\xf6')
+>>> c
+False
+>>> n, c = Julian.objects.get_or_create(name=u'\xd6')
+>>> c
+True
+>>> n.name == u'\xd6'
+True
 """
 }
