Jaka jest różnica między varchar a varchar2 w Oracle?
Jaka jest różnica między varchar a varchar2?
8 answers
Na razie są synonimami.
VARCHAR
jest zarezerwowane przez Oracle
do obsługi rozróżnienia pomiędzy NULL
i pustym łańcuchem w przyszłości, zgodnie ze standardem ANSI
.
VARCHAR2
nie rozróżnia NULL
i pustego łańcucha i nigdy nie będzie.
Jeśli polegasz na pustym łańcuchu i NULL
jest tym samym, powinieneś użyć VARCHAR2
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-08 22:31:12
Obecnie VARCHAR zachowuje się dokładnie tak samo jak VARCHAR2. Jednak ten typ nie powinien być używany, ponieważ jest zarezerwowany do przyszłego użycia.
Wzięte z: różnica między CHAR, VARCHAR, VARCHAR2
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-23 11:43:16
Zaczerpnięte z najnowszej stabilnej wersji produkcyjnej Oracle 12.2: Typy Danych
Zasadnicza różnica polega na tym, że VARCHAR2
jest wewnętrznym typem danych i VARCHAR
jest zewnętrznym typem danych. Musimy więc zrozumieć różnicę między wewnętrznym a zewnętrznym typem danych...
Wewnątrz bazy danych wartości są przechowywane w kolumnach w tabelach. Wewnętrznie Oracle reprezentuje dane w określonych formatach znanych jako wewnętrzne typy danych .
W ogólnie, aplikacje OCI (Oracle Call Interface) nie działają z wewnętrznymi reprezentacjami danych typu danych, ale z typami danych języka hosta, które są predefiniowane przez język, w którym są zapisywane. Gdy dane są przesyłane między aplikacją kliencką OCI a tabelą bazy danych, biblioteki OCI konwertują dane między wewnętrznymi typami danych a zewnętrznymi typami danych.
Typy zewnętrzne zapewniają wygodę programiście, umożliwiając pracę z językiem hosta typy zamiast własnych formatów danych. OCI może wykonywać szeroki zakres konwersji typów danych podczas przesyłania danych między bazą danych Oracle a aplikacją OCI. Istnieje więcej zewnętrznych typów danych OCI niż wewnętrznych typów danych Oracle.
Typ danych VARCHAR2
jest ciągiem znaków o zmiennej długości o maksymalnej długości 4000 bajtów. Jeśli init.parametr Ora max_string_size jest domyślny, maksymalna długość VARCHAR2
może wynosić 4000 bajtów. Jeśli init.parametr ora max_string_size = extended, maksymalna długość VARCHAR2
może wynosić 32767 bajtów
Typ danych VARCHAR
przechowuje ciągi znaków o różnej długości. Pierwsze 2 bajty zawierają Długość łańcucha znaków, a pozostałe bajty zawierają łańcuch znaków. Podana Długość łańcucha w wywołaniu bind lub define musi zawierać dwa bajty długości, więc największy VARCHAR
łańcuch, który może być odebrany lub wysłany, ma długość 65533 bajtów, a nie 65535.
Szybki test w bazie danych 12.2 sugeruje, że jako wewnętrzny typ danych , Oracle nadal traktuje {[2] } jako pseudotyp dla VARCHAR2
. Nie jest to SYNONYM
, który jest rzeczywistym typem obiektu w Oracle.
SQL> select substr(banner,1,80) from v$version where rownum=1;
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL> create table test (my_char varchar(20));
Table created.
SQL> desc test
Name Null? Type
MY_CHAR VARCHAR2(20)
Istnieją również pewne implikacje VARCHAR
dla opcji Prekompilatora ProC / C++. Dla programistów, którzy są zainteresowani, link znajduje się pod adresem: Pro * C / C++ Programmer ' s Guide
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-01 16:45:25
Po kilku eksperymentach (patrz poniżej), mogę potwierdzić, że od września 2017 roku nic się nie zmieniło w odniesieniu do funkcjonalności opisanej w zaakceptowanej odpowiedzi:-
-
rextester demo dla Oracle 11g:
Puste ciągi są wstawiane jako
NULL
s dla obuVARCHAR
iVARCHAR2
. - LiveSQL demo dla Oracle 12c: te same wyniki.
historyczny powód tych dwóch słów kluczowych jest dobrze wyjaśniony w an odpowiedź na inne pytanie .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-01 22:33:28
Obecnie są takie same. ale wcześniej
- gdzieś w sieci, czytałem, że,
VARCHAR
jest zarezerwowane przez Oracle do obsługi rozróżnienia między NULL
i pustym łańcuchem w przyszłości, zgodnie ze standardem ANSI.
VARCHAR2
nie rozróżnia NULL
i pustego łańcucha i nigdy nie będzie.
- również,
Emp_name varchar(10)
- Jeśli wprowadzisz wartość mniejszą niż 10 cyfr, pozostała spacja nie może zostać usunięta. wykorzystało łącznie 10 miejsca.
Emp_name varchar2(10)
- Jeśli wprowadzisz wartość mniejszą niż 10 cyfr, pozostała spacja zostanie automatycznie usunięta
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-16 10:52:26
VARCHAR2
Jest używany do przechowywania łańcuchów znaków o zmiennej długości. Długość łańcucha wartości zostanie zapisana na dysku z samą wartością.
variable x varchar2(10)
begin
:x := 'hullo';
end;
/
VARCHAR
Zachowuje się dokładnie tak samo jak VARCHAR2. Jednak ten typ nie powinien być używany, ponieważ jest zarezerwowany dla przyszłego użycia
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-06 13:15:24
Varchar może przechowywać do 2000 bajtów znaków, podczas gdy VARCHAR2 może przechowywać do 4000 bajtów znaków.
-
Jeśli zadeklarujemy typ danych jako VARCHAR, to zajmie On miejsce dla wartości NULL. W przypadku typu danych VARCHAR2, nie zajmie on Miejsca dla wartości NULL. np.,
name varchar(10)
Zarezerwuje 6 bajtów pamięci, nawet jeśli nazwa to ' Ravi__', podczas gdy
name varchar2(10)
Zarezerwuje miejsce zgodnie z długością łańcucha wejściowego. np. 4 bajty pamięci dla ' Ravi__'.
Tutaj, _ reprezentuje NULL.
Uwaga: varchar rezerwuje miejsce na wartości null, a varchar2 nie rezerwuje miejsca na wartości null.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-27 20:50:35
Różnica:
-
VARCHAR
może przechowywać do 2000 bajtów znaków, podczas gdyVARCHAR2
może przechowywać do 4000 bajtów znaków. - jeśli zadeklarujemy typ danych jako
VARCHAR
, to zajmie On przestrzeń dla wartościNULL
, w przypadku typu danychVARCHAR2
nie zajmie żadnej przestrzeni.
Podobieństwo:
-
VARCHAR
iVARCHAR2
mają charakter zmienny.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-06 03:04:49