Opened 5 years ago
Closed 5 years ago
#30954 closed Bug (wontfix)
NVARCHAR2 fields are not using cx_Oracle.NCHAR.
Reported by: | Jaume Moral | Owned by: | nobody |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | dev |
Severity: | Normal | Keywords: | oracle charset |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
When inserting or updating NVHARCHAR2 fields and we need to store special char in a parameter "x" we need to use
cursor.setinputsizes(x=cx_Oracle.NCHAR)
I found this is this discussion
https://github.com/oracle/python-cx_Oracle/issues/119
As far as I know, this is not implemented in Oracle backend. In OracleParam class, input_size is used with some data types (TIMESTAMP, CLOB...) but not for NCHAR. I tried to patch it forcing NCHAR in every string, but I'm sure this is not the best way to do it.
We can see this bug in an Oracle DB with ISO8859 charset, when using models with CharField (that maps to NVARCHAR2) and with any non-iso8859 character (for example, "ć"). Without the patch, this special chars turn into "¿" in database.
Change History (1)
comment:1 by , 5 years ago
Resolution: | → wontfix |
---|---|
Status: | new → closed |
Summary: | NVARCHAR2 fields are not using cx_Oracle.NCHAR → NVARCHAR2 fields are not using cx_Oracle.NCHAR. |
Version: | 2.2 → master |
Django supports only databases that use UTF-8 encoding (see documentation). Using
cx_Oracle.NCHAR
will not fix your issue becauseconnection.nencoding
is set toUTF-8
.