Fixed #27219 -- Changed cx_Oracle client encoding to AL32UTF8 to allow 4-byte characters.

This commit is contained in:
Dmitry Medvinsky 2016-09-13 15:14:49 +03:00 committed by Tim Graham
parent 358c6f21f8
commit 1a9f6db5ff
3 changed files with 25 additions and 3 deletions

View File

@ -41,7 +41,7 @@ def _setup_environment(environ):
_setup_environment([ _setup_environment([
# Oracle takes client-side character set encoding from the 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 # This prevents unicode from getting mangled by getting encoded into the
# potentially non-unicode database character set. # potentially non-unicode database character set.
('ORA_NCHAR_LITERAL_REPLACE', 'TRUE'), ('ORA_NCHAR_LITERAL_REPLACE', 'TRUE'),

View File

@ -1,5 +1,10 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from unittest import skipIf
from django.core.exceptions import ValidationError 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.test import SimpleTestCase, TestCase
from django.utils.functional import lazy from django.utils.functional import lazy
@ -21,6 +26,12 @@ class TestCharField(TestCase):
def test_lookup_integer_in_charfield(self): def test_lookup_integer_in_charfield(self):
self.assertEqual(Post.objects.filter(title=9).count(), 0) 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): class ValidationTests(SimpleTestCase):

View File

@ -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 django.test import TestCase
from .models import Post from .models import Post
@ -23,3 +28,9 @@ class TextFieldTests(TestCase):
def test_lookup_integer_in_textfield(self): def test_lookup_integer_in_textfield(self):
self.assertEqual(Post.objects.filter(body=24).count(), 0) 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 😀.')