Koks skirtumas tarp „varchar“ ir „varchar2“ „Oracle“?

Koks skirtumas tarp varchar ir varchar2?

209
23 июля '09 в 14:40 2009-07-23 14:40 hrishi yra nustatytas liepos 23 d ., 09:40, 2009-07-23 14:40
@ 8 atsakymai

Šiuo metu jie yra sinonimai.

Oracle rezervuoja „ VARCHAR , kad ateityje padėtų atskirti NULL ir tuščią eilutę, kaip nurodyta ANSI standarte.

VARCHAR2 nesiskiria NULL ir tuščia eilute ir niekada nebus.

Jei pasitikite tuščia eilute ir tuo pačiu NULL , turėtumėte naudoti VARCHAR2 .

277
23 июля '09 в 14:41 2009-07-23 14:41 atsakymas pateikiamas Quassnoi liepos 23 d., 09:41 , 2009-07-23 14:41

Šiuo metu VARCHAR elgiasi lygiai taip pat kaip VARCHAR2. Tačiau VARCHAR tipas neturėtų būti naudojamas, nes jis yra skirtas naudoti ateityje.

border=0

Paimtas iš: skirtumas tarp CHAR, VARCHAR, VARCHAR2

34
23 июля '09 в 14:43 2009-07-23 14:43 Atsakymą pateikė Brianas liepos 23 d., 09:43, 2009-07-23 14:43

Paimta iš naujausios stabilios „Oracle 12.2“ versijos: duomenų tipai

Pagrindinis skirtumas yra tas, kad VARCHAR2 yra vidinis duomenų tipas, o VARCHAR yra išorinis duomenų tipas. Todėl turime suprasti skirtumą tarp vidinių ir išorinių duomenų tipų ...

Duomenų bazės viduje reikšmės saugomos stulpeliuose lentelėse. Viduje „Oracle“ pateikia duomenis tam tikru formatu, vadinamu vidiniais duomenų tipais.

Apskritai, „Oracle Call Interface“ (OCI) programos neveikia su duomenų tipų vidiniais duomenų atvaizdavimais, bet su priimančiosios kalbos duomenų tipais, kuriuos nustato kalba, kuria jie rašomi. Kai duomenys perduodami tarp OCI kliento programos ir duomenų bazės lentelės, OCI bibliotekos konvertuoja duomenis tarp vidinių duomenų tipų ir išorinių duomenų tipų.

Išoriniai tipai suteikia programuotojui patogumo, todėl galite dirbti su priimančiųjų kalbų tipais, o ne su patentuotais duomenų formatais. OCI gali atlikti platų duomenų tipų konversijų diapazoną perduodant duomenis tarp „Oracle“ duomenų bazės ir „OCI“ programos. Yra daugiau išorinių OCI duomenų tipų nei vidiniai „Oracle“ duomenų tipai.

VARCHAR2 duomenų VARCHAR2 yra kintamo ilgio simbolių eilutė, kurios maksimalus ilgis yra 4000 baitų. Jei numatytasis init.ora parametras yra max_string_size, didžiausias VARCHAR2 ilgis gali būti 4000 baitų. Jei init.ora parametras max_string_size = pratęstas, maksimalus VARCHAR2 ilgis gali būti 32767 baitai

VARCHAR duomenų tipas saugo įvairių ilgių simbolių eilutes. Pirmuosius 2 baitus sudaro simbolių eilutės ilgis, o likusieji baitai turi eilutę. Nurodytas eilutės ilgis susietame arba apibrėžtame kvietime turi apimti du ilgio baitus, todėl didžiausia VARCHAR eilutė, kurią galima priimti arba siųsti, yra 65533 baitai, o ne 65535.

Greitasis testas duomenų bazėje 12.2 reiškia, kad kaip vidinis duomenų tipas „Oracle“ vis dar laiko VARCHAR kaip VARCHAR2 pseudotipą. Tai NE SYNONYM kuris yra tikrasis „Oracle“ objekto tipas.

 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) 

Taip pat yra keletas VARCHAR parametrų reikšmių ProC / C ++ Precompiler. Programuotojams, kurie domisi, nuoroda yra: Pro * C / C ++ Programmer Guide

17
01 сент. atsakymą pateikė Sandman 01 Sep 2017-09-01 19:18 '17, 19:18 2017-09-01 19:18

Po kai kurių eksperimentų (žr. Toliau) galiu patvirtinti, kad nuo 2017 m. Rugsėjo mėn. Niekas nepasikeitė atsižvelgiant į priimtame atsakyme aprašytą funkciją: -

Istorinė šių dviejų raktinių žodžių priežastis yra gerai paaiškinta atsakyme į kitą klausimą .

2
02 сент. Atsakymą pateikė Steve Chambers, rugsėjo 02 2017-09-02 01:33 '17 at 1:33 2017-09-02 01:33

Šiuo metu jie yra tokie patys. bet anksčiau

  1. Kažkur tinkle, aš jį perskaičiau

„Oracle“ rezervuoja VARCHAR kad ateityje galėtų palaikyti skirtumus tarp NULL ir tuščios eilutės, kaip nustatyta ANSI standarte.

VARCHAR2 nesiskiria nuo NULL ir tuščios eilutės ir niekada nebus.

  1. Taip pat

Emp_name varchar(10) - jei įvesite mažesnę nei 10 skaitmenų reikšmę, likusios vietos negalima ištrinti. jis naudojo tik 10 vietų.

Emp_name varchar2(10) - jei įvesite mažesnę nei 10 skaitmenų reikšmę, likusi erdvė automatiškai ištrinama.

1
16 июля '18 в 12:43 2018-07-16 12:43 atsakymas į „ Ramkumar P“ pateikiamas liepos 18 d. 18 val. 12:43 val. 2018-07-16 12:43

VARCHAR2

naudojamas išsaugoti kintamo ilgio simbolių eilutes. Stygos ilgis bus saugomas diske su pačia reikšme.

 variable x varchar2(10) begin :x := 'hullo'; end; / 

Varchar

elgiasi lygiai taip pat, kaip ir VARCHAR2. Tačiau šis tipas neturėtų būti naudojamas, nes jis skirtas naudoti ateityje.

0
06 апр. atsakymas pateikiamas Nisar 06 balandžio. 2014-04-06 16:15 '14 at 16:15 2014-04-06 16:15

Skirtumas:

  • VARCHAR gali išsaugoti iki 2000 baitų simbolių, o VARCHAR2 gali išsaugoti iki 4000 baitų simbolių.
  • Jei deklaruojame duomenų tipą kaip VARCHAR tuomet ji užims erdvę NULL reikšmėms, o VARCHAR2 duomenų tipo atveju ji nepriims jokios vietos.

Panašumas:

  • VARCHAR ir VARCHAR2 yra įvairūs.

šaltinis

-1
03 янв. atsakymas pateikiamas Premraj 03 sausio. 2016-01-03 06:31 '16 at 6:31 AM 2016-01-03 06:31
  • VARCHAR gali išsaugoti iki 2000 baitų simbolių, o VARCHAR2 gali išsaugoti iki 4000 baitų simbolių.

  • Jei deklaruojame duomenų tipą kaip VARCHAR, tada ji užims NULL reikšmes. Jei duomenų tipas „VARCHAR2“, jis nebus užimtas už NULL reikšmes. Pavyzdžiui.

    name varchar(10)

rezervuos 6 baitus atminties, net jei pavadinimas yra "Ravi__", o

 name varchar2(10) 

rezervuoja erdvę pagal įvesties eilutės ilgį. pavyzdžiui, 4 baitai „Ravi __“ atminties.

Čia _ reiškia nulį.

PASTABA. varchar rezervuos erdvę nulinėms reikšmėms, o varchar2 neišsaugos vietos nulinėms reikšmėms.

-1
27 апр. Palak Jain atsakymas balandžio 27 d 2017-04-27 23:12 '17 at 11:12 2017-04-27 23:12

Kiti klausimai apie arba Užduoti klausimą