2011-09-19 38 views
26

estoy apoyando código que tiene debajo de declaración de esquema: -varchar2 (n BYTE | CHAR) por defecto -> CHAR o BYTE

create table sample (
     id number Primary key, 
     username varchar2(100), 
); 

Miré hacia arriba en la documentación de Oracle & varchar2 tiene dos modos de declaración varchar2 (n BYTE) y varchar2 (n CHAR), si no especifico explícitamente BYTE o CHAR &, simplemente declare el nombre de usuario varchar2 (500), ¿se asignarán 500 BYTES o 500 caracteres?

gracias,

Respuesta

30

El valor por defecto será lo que su parámetro se establece en NLS_LENGTH_SEMANTICS. De manera predeterminada, eso es BYTE para ser consistente con versiones anteriores de Oracle donde no había opción de usar la semántica de longitud de caracteres. Si está definiendo su propio esquema y está usando un conjunto de caracteres de ancho variable (como AL32UTF8), le recomiendo encarecidamente que configure NLS_LENGTH_SEMANTICS en CHAR debido a que casi siempre se pretenden especificar longitudes en caracteres que no estén en bytes.

+13

Es posible que desee añadir que el establecimiento NLS_LENGTH_SEMANTICS a CARácter * * no superar el límite de 4.000 bytes ** ** para una columna VARCHAR. –

+1

en [esto] (https://docs.oracle.com/cd/E24693_01/server.11203/e24448/initparams149.htm) la página dice: _Precaución: Oracle recomienda encarecidamente NO establecer el parámetro NLS_LENGTH_SEMANTICS en CHAR en la instancia o archivo de parámetros del servidor. Esto puede provocar que muchas secuencias de comandos de instalación existentes creen columnas con semántica de longitud de caracteres, lo que da como resultado errores en el tiempo de ejecución, incluidos los desbordamientos del búfer. Como dijo, casi siempre se intenta especificar longitudes en los caracteres. Eso realmente me desanima qué debería saber, de vez en cuando necesito aumentar el tamaño de algunas columnas. – mkb

+2

@mkb - El parámetro también se puede establecer en el nivel de la sesión. Establezca el parámetro en el nivel de sesión cuando defina sus objetos si no desea el riesgo de tenerlo configurado en el nivel de instancia. O simplemente configúrelo en el nivel de instancia de nuevo en BYTE antes de ejecutar un script de instalación de Oracle. –

8

Es posible comprobar su valor actual utilizando la siguiente consulta:

SELECT 
    value 

FROM 
    NLS_DATABASE_PARAMETERS 

WHERE 
    parameter='NLS_LENGTH_SEMANTICS'; 
+1

Su 'valor' y no 'val' –

+0

@Abhijith Corrección. –

Cuestiones relacionadas