diff --git a/django/db/backends/oracle/base.py b/django/db/backends/oracle/base.py index c4dc075355c..9fafd43b34e 100644 --- a/django/db/backends/oracle/base.py +++ b/django/db/backends/oracle/base.py @@ -41,7 +41,7 @@ def _setup_environment(environ): _setup_environment([ # Oracle takes client-side character set encoding from the environment. - ('NLS_LANG', '.UTF8'), + ('NLS_LANG', '.AL32UTF8'), # This prevents unicode from getting mangled by getting encoded into the # potentially non-unicode database character set. ('ORA_NCHAR_LITERAL_REPLACE', 'TRUE'), diff --git a/tests/model_fields/test_charfield.py b/tests/model_fields/test_charfield.py index ca6e5ef9fe1..82c78487772 100644 --- a/tests/model_fields/test_charfield.py +++ b/tests/model_fields/test_charfield.py @@ -1,5 +1,10 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from unittest import skipIf + from django.core.exceptions import ValidationError -from django.db import models +from django.db import connection, models from django.test import SimpleTestCase, TestCase from django.utils.functional import lazy @@ -21,6 +26,12 @@ class TestCharField(TestCase): def test_lookup_integer_in_charfield(self): self.assertEqual(Post.objects.filter(title=9).count(), 0) + @skipIf(connection.vendor == 'mysql', 'See https://code.djangoproject.com/ticket/18392') + def test_emoji(self): + p = Post.objects.create(title='Smile 😀', body='Whatever.') + p.refresh_from_db() + self.assertEqual(p.title, 'Smile 😀') + class ValidationTests(SimpleTestCase): diff --git a/tests/model_fields/test_textfield.py b/tests/model_fields/test_textfield.py index 1c7a6891a81..e1d751f1be3 100644 --- a/tests/model_fields/test_textfield.py +++ b/tests/model_fields/test_textfield.py @@ -1,4 +1,9 @@ -from django.db import models +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from unittest import skipIf + +from django.db import connection, models from django.test import TestCase from .models import Post @@ -23,3 +28,9 @@ class TextFieldTests(TestCase): def test_lookup_integer_in_textfield(self): self.assertEqual(Post.objects.filter(body=24).count(), 0) + + @skipIf(connection.vendor == 'mysql', 'See https://code.djangoproject.com/ticket/18392') + def test_emoji(self): + p = Post.objects.create(title='Whatever', body='Smile 😀.') + p.refresh_from_db() + self.assertEqual(p.body, 'Smile 😀.')