Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8662233
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 12, 20262026-06-12T16:41:05+00:00 2026-06-12T16:41:05+00:00

Some columns of my tables need to support Unicode characters (Let’s say 1% of

  • 0

Some columns of my tables need to support Unicode characters (Let’s say 1% of all my columns).

I think I have the following two options:

  1. Implement the Unicode columns as NVARCHAR2; or
  2. Change the character set of the whole database to one that supports Unicode (this way I can use VARCHAR2).

I’m inclined to the second option (in order to not have to change my already existing VARCHAR2 scripts).

My question is: what are the disadvantages and advantages of this second option, when compared with the first one? Is it less performant?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-12T16:41:06+00:00Added an answer on June 12, 2026 at 4:41 pm

    I would strongly lean toward changing the character set of the database.

    There are potential downsides of doing so

    • If you are storing data that is not in the 7-bit ASCII character set in your other columns, you will increase the amount of space that is required to store the data. Assuming that your existing character set is one of the 8-bit character sets that allow you to store English plus a few other languages, any non-English characters in the data will generally require 2 or more bytes of storage per character. For example, if you are storing the character “h”, that’s an English character that is part of the 7-bit ASCII character set so it would require 1 byte in either your single-byte character set or your Unicode character set. If you are storing the character “À”, on the other hand, that is not English and not part of the 7-bit ASCII character set so it would require 2 bytes of storage in a Unicode character set vs. 1 byte in your existing single-byte character set. Other characters will require 3 bytes of storage.
    • You’ll have to care about character vs. byte semantics when you declare a VARCHAR2. By default, VARCHAR2(50) allocates 50 bytes of storage which will allow you to store between 16 and 50 characters if you’re using an AL32UTF8 character set rather than being a simple 1:1 mapping like it is if you’re using a single-byte character set. That will require either that you increase the size of your columns (i.e. triple them) to ensure that they store the appropriate number of characters or that you specify character-length semantics when you declare the column (i.e. VARCHAR2(50 CHAR)) or that you set your NLS_LENGTH_SEMANTICS to CHAR before creating the objects in order to change the default to character-length semantics. There is a discussion on the Oracle Globalization forum about whether it is appropriate to change the NLS_LENGTH_SEMANTICS at the instance level— Sergiusz Wolicki, one of Oracle’s top globalization gurus suggests strongly against it though I am personally much more willing to consider it under the right circumstances. You can also set the NLS_LENGTH_SEMANTICS at the session level which is something Sergiusz does not object to but does require that you do so every time you run a script which may be a concern.
    • Most tools don’t deal particularly well with queries against the data dictionary where character semantics were used to create the column. They don’t properly use the CHAR_LENGTH and DATA_LENGTH columns where they want the length in characters vs. the length in bytes. This may be a minor issue for you or a serious pain if you have existing tools/ scripts/ etc. that run queries against the data dictionary to generate DDL or to determine how much memory needs to be allocated or some other situation where you end up getting funky results.

    However, those downsides are more than outweighed by the advantages of having a single character set for all your data

    • Handling NVARCHAR2 columns generally requires application code changes. Since you’re going to have both VARCHAR2 and NVARCHAR2 columns, those code changes and configuration settings can be non-trivial and are often a major annoyance. Inevitably, you’ll find that you mapped a particular column incorrectly in some application and you’ll encounter data corruption bugs that are a pain to track down. This is more true the more layers of abstraction you have between your database and your application.
    • If 1% of the columns need to support Unicode today, it is inevitably the case that more columns will need to support Unicode tomorrow. As additional requirements are added, changing the data type of a column from VARCHAR2 to NVARCHAR2 is a pain– you’ll need to add a new column, copy the data over, and remove the old column, rename the new column, and deal with the row migration that resulted. You’ll then have to make changes to all your existing applications so that they map the column correctly. When the business decides that one more column needs to support additional languages and your database and applications already support Unicode, that level of effort and testing will seem rather excessive.
    • SQL statements must be encoded in the database character set. This tends to create issues if you ever want to use data from an NVARCHAR2 column as a literal in a SQL statement either in an application (say, to avoid bind variable peeking or to better leverage a histogram) or as part of production support when you want to track down issues in the data.
    • Unicode character sets are the direction Oracle strongly encourages and the use of NVARCHAR2 columns is strongly discouraged. This probably doesn’t have immediate practical consequences but if your system is supposed to be around for a number of years, it’s likely that there will be consequences in the future.

    Sergiusz sums up Oracle’s advice very well in this thread

    Oracle’s advice:

    • For any new database, create it with the AL32UTF8 character set and forget about NCHAR data types.
    • For any existing application to be made multilingual, migrate the backend database to AL32UTF8 and forget about NCHAR data types.
    • For any existing non-Unicode database serving a large legacy application system that is too costly or impossible to migrate to
      Unicode, to which you are asked to add a minor module that has to
      support multilingual data and for which a separate database makes
      little sense, you may consider NVARCHAR2 columns for this multilingual
      data.
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

i have two joined tables. Now i need to print out some columns, but
I have the query to select some columns from two tables, which must contain
Let's assume that I have 2 tables: Human, Car. Table Car has some columns
I have 2 tables with some columns and another table that I want its
i have made columns in some of the tables encrypted in sql server 2008.
I need to implement yet another database website. Let's say roughly 5 tables, 25
i am using datatables.net and need to have some columns with fixed width and
Can I adjust the ASP.NET Membership Tables to add some columns of my own?
I have a SQL table in which some columns, when viewed in SQL Server
I have a table of 26 million records, and wanted to add some columns

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.