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が出てしまう・・・