OracleのNVARCHAR2ってVARCHAR2より便利だね

NVARCHAR2とは

NVARCHAR2とは、各国の国語文字を格納できるデータ型のことです。

「国語文字?なんじゃそれ??」と感じる方もいるかも知れませんが、国語文字とは日本なら日本語、中国なら中国語のように国固有の文字のことを指します。

そのため、NVARCHAR2(5)とすることで、「あいうえお」が格納できるようになります。

文字コード
パソコンは0と1の2つの文字を用いて情報を判別している。
あ→00100110000100010

英語圏の人たちはアルファベットと数字や記号に対して日本は漢字、平仮名、カタカナ、数字、記号などがある。
日本語は2〜3バイトで1文字を表しており、英語圏は1バイトで1文字を表している。
このように文字コードは言語によって形態が違う。

なので文字コードの設定は大事!

 

これがVARCHAR2(5)だと文字コードの設定にもよりますが、日本語だと一文字あたり2〜3Byteあたり使用されるので2文字から3文字までしか格納することができません。

Byteでデータを管理するよりも日本語としてデータを扱いたい場合はNVARCHAR2がおすすめですね。

注意!
NVARCHAR2を使用したとしてDBには日本語1文字を1として扱えるのですが、容量的には2〜3Byteのデータを消費している点は注意してくださいね!

VARCHAR2をNVARCHAR2に変換するためには

型が違うと同じ文字列でも異なる値としてデータが扱われるので、同一の値として扱いたい時は型変換をしましょう。

OracleではVARCHAR2型やCHAR型をNVARCHAR2型やNCHAR型に変換するときには「TO_NCHAR」を使用します。

TO_NCHAR(変換したい値)

変換したい値には数値も入れることが可能らしいです。

具体的な使い方

システム改修にあたり新規テーブルにNVARCHAR2を指定したカラムを用意し、既存テーブルでVARCHAR2が設定されているカラムをインサートしたい場面があったとします。

その新規テーブルに既存テーブルのデータを格納するときには型変換をしてデータを格納します。

CREATE TABLE newTable
                          (id NUMBER(2,0) NOT NULL AUTO_INCREMENT,
                           name NVARCHAR2(15));
INSERT INTO newTable(id,name)
SELECT id,TO_NCHAR(name)
FROM oldTable;

 

 

 

Twitterでフォローしよう

おすすめの記事