Temat: ORACLE: LONG na VARCHAR2 bez utraty danych
Łukasz Kurowski:
Marek Łukianowski:
alter table nazwa_tab add dwarunek3 varchar2(4000 CHAR)
kodowanie nie będzie miało wtedy znaczenia.
Spróbuj zapakować do tej kolumny 1001 japońskich znaków ;)... Ostatecznie 2001 polskich znaków ;).
Przy deklaracji VARCHAR2(4000) baza oracle'a domyślnie podstawia wartość BYTE.
Niekoniecznie. Zależy jak masz zdefiniowaną bazę/użytkownika/sesję.
1)
SQL> select * from nls_database_parameters;
PARAMETER VALUE
------------------------------ --------------------------------------------------------------------------------
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET AL32UTF8
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY $
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_RDBMS_VERSION 10.2.0.1.0
20 rows selected
SQL> create table test_char(a varchar2(2));
Table created
SQL>
Name Type Nullable Default Comments
---- ----------- -------- ------- --------
A VARCHAR2(2) Y
SQL>
Table created
Name Type Nullable Default Comments
---- ---------------- -------- ------- --------
A VARCHAR2(2 CHAR) Y
SQL>
insert into test_char (a) values ('ąę')
ORA-12899: value too large for column "PM"."TEST_CHAR"."A" (actual: 4, maximum: 2)
Commit complete
SQL> insert into test_char_2 (a) values ('ąę')
1 row inserted
Commit complete
SQL> select * from test_char_2;
SQL>
A
--------
ąę
Wydaje mi się, że jednak nie ma przeszkód. :) Choć może coś źle zrozumiałem :)
Marek Łukianowski edytował(a) ten post dnia 10.05.11 o godzinie 17:54