share facebook facebook twitter menu hatena pocket slack

2011.06.16 THU

Oracle RDSでnls_length_semanticsの値をCHARに(文字型のサイズをバイト単位から文字数単位に)

鈴木 宏康

WRITTEN BY 鈴木 宏康

Oracleでの文字型の列サイズは、デフォルトではバイト単位になります。
Ex. サイズが10なら10バイト分、文字を入れることが可能です。

このサイズをnls_length_semanticsというパラメータで文字数単位にすることが可能で、Oracle RDSでもDBパラメータグループで設定することができます。

デフォルトのRDS Oracleでは、下記のようにバイト単位のままです。

SQL> show parameters nls_length_semantics;
NAME                 TYPE   VALUE
-------------------- ------ -----
nls_length_semantics string BYTE

それを下記のようなPHPなどで、パラメータを変更すると、

require_once("/opt/aws/php/sdk.class.php");

define("AWS_KEY"       , "AAAAAAAA");
define("AWS_SECRET_KEY", "SSSSSSSS");

$rds = new AmazonRDS();
$rds->set_region(AmazonRDS::REGION_APAC_NE1);

$response = $rds->modify_db_parameter_group("suz-lab", array(
    array(
        "ParameterName"  => "nls_length_semantics",
        "ParameterValue" => "CHAR",
        "ApplyMethod"    => "pending-reboot"
    )
));

var_dump($response);

次のように、パラメータが変更されます。

もう一度、パラメータを確認すると、文字数単位に変更されていることがわかります。

SQL> show parameters nls_length_semantics;
NAME                 TYPE   VALUE
-------------------- ------ -----
nls_length_semantics string CHAR

しかし、文字数単位にしてデータインポートしても、ORA-12899が出てしまう・・・

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら

鈴木 宏康

鈴木 宏康

愛知県生まれ。東京工業大学大学院修士課程修了。在学時より、ベンチャー企業でインターネットに関する業務に携わり、現在はクラウド(主にAmazon Web Services)上での開発・運用を軸とした事業の、業務の中心として活躍。

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。