복붙노트

[SQL] VARCHAR2와 문자 사이의 주요 차이점은 무엇입니까

SQL

VARCHAR2와 문자 사이의 주요 차이점은 무엇입니까

테이블 만들기 :

CREATE TABLE test (
charcol    CHAR(10),
varcharcol VARCHAR2(10));

SELECT LENGTH(charcol), LENGTH(varcharcol) FROM test;

결과:

LENGTH(CHARCOL) LENGTH(VARCHARCOL)
--------------- ------------------
             10                  1 

나에게 VARCHAR2와 문자 사이의 차이점은 무엇입니까 알려주세요? 어떤 시간에 우리는 모두를 사용할 수 있습니까?

해결법

  1. ==============================

    1.간단한 예는 차이를 표시합니다 :

    간단한 예는 차이를 표시합니다 :

    SELECT 
        '"'||CAST('abc' AS VARCHAR2(10))||'"', 
        '"'||CAST('abc' AS CHAR(10))||'"' 
    FROM dual;
    
    
    '"'||CAST('ABC'ASVARCHAR2(10))||'"' '"'||CAST('ABC'ASCHAR(10))||'"'
    ----------------------------------- -------------------------------
    "abc"                               "abc       "                   
    1 row selected.
    

    CHAR는 예를 들면 문자의 길이가 항상 수정 인 표현에 유용 예를 들어 CA, NY, FL, TX에 대한 미국의 상태에 대한 우편 번호,

  2. ==============================

    2.이 오래된 스레드이지만, 그것은 단지 'VARCHAR2 대 오라클 문자'에 대한 Google 검색의 상단을 왔고, 이미 올바르게 문자의 동작을 설명하는 여러 답변이 있지만, 나는 당신이 그것을 사용하지 않도록 말했다 될 필요가 생각 두 가지 특정 상황을 제외 :

    이 오래된 스레드이지만, 그것은 단지 'VARCHAR2 대 오라클 문자'에 대한 Google 검색의 상단을 왔고, 이미 올바르게 문자의 동작을 설명하는 여러 답변이 있지만, 나는 당신이 그것을 사용하지 않도록 말했다 될 필요가 생각 두 가지 특정 상황을 제외 :

    어떤 길이 (예 : 'USD'로, 예를 들어 Y / N 플래그 또는 ISO 통화 코드)를 고정해서 사용 문자에 이유가 정말 없습니다. 그것은 (문자 단지 빈 패딩 오버 헤드있다 VARCHAR2에 대한 신화 길이 표시기가 없습니다)는 공간 저장하지 않습니다, 더 효율적이 아니다, 그것은 짧은 값을 입력 정지 누구를하지 않습니다. (입력하면 'ZZ'당신의 문자 (3) 통화 열에서, 그것은 단지 'ZZ'로 저장 얻을 것이다.) 그것은 그것에 의존하면, 하나 때문에 거기 결코 오라클의 고대 버전과도 역 호환이 아니다 .

    (가장 좋은 방법을 다음)로 그리고 전염 당신은 sales.currency %의 유형 같은 것을 사용하여 변수 선언을 고정 수, 확산 될 수 있습니다. 이제 l_sale_currency 변수는 둘 다에 ZZ '를'l_sale_currency이 아닌 사용자가 할당하더라도 동일한 l_refund_currency 않는 모호한 버그의 문을 열고, 짧은 값 (또는 ')'에 대한 보이지 않게 빈 - 패딩 얻을 것이다 스텔스 문자입니다.

    나는 확실히, ANSI 호환성 이유를 해요 위해 CHAR는 오라클 6 년에 도입되었다. 아마 거기에 (또는 그때로 사용) 자신의 체크리스트에 구입 및 ANSI 호환되는 데이터베이스 제품을 결정 잠재 고객, 그리고 오라클을 제공해야하므로 CHAR은 빈 - 패딩, ANSI 표준에 정의되어 있습니다. 당신은 실제로 그것을 사용하기로되어 있지 않습니다.

  3. ==============================

    3.그냥 많은 잘못된 정보에 대한 혼란을 방지 할 수 있습니다. 여기에 차이를 포함하여 성능에 대한 몇 가지 정보가 있습니다

    그냥 많은 잘못된 정보에 대한 혼란을 방지 할 수 있습니다. 여기에 차이를 포함하여 성능에 대한 몇 가지 정보가 있습니다

    참조 : https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:2668391900346844476

  4. ==============================

    4.CHAR 유형은 다음 항상 데이터베이스에 10 바이트를 저장하고 당신이 텍스트를 저장하거나 10 바이트를 비우 여부를 중요하지 않습니다, 그것은 10 바이트라고 그렇다면, 크기를 고정하고있다

    CHAR 유형은 다음 항상 데이터베이스에 10 바이트를 저장하고 당신이 텍스트를 저장하거나 10 바이트를 비우 여부를 중요하지 않습니다, 그것은 10 바이트라고 그렇다면, 크기를 고정하고있다

    VARCHAR2의 크기는 실제로 데이터베이스에 저장하려고 바이트 수에 따라 달라집니다. (1 바이트가 최소가 있지만) 사용자가 지정하는 번호가 저장 될 수있는 바이트의 단지 최대 수입니다

    (사전에 당신이 저장 될 문자열의 정확한 길이를 알고) 고정 길이 문자열을 처리 할 때 CHAR을 사용해야합니다 - 데이터베이스가 다음 더 빨리으로 조작 할 수는 정확히 아이폰에 알고 있기 때문에

    당신이 저장된 문자열의 정확한 길이를 모를 때 당신은 VARCHAR2을 사용해야합니다.

    당신이 모두를 사용합니다 상황이있을 수 있습니다 :

    name VARCHAR2(255),
    zip_code CHAR(5) --if your users have only 5 place zip codes
    
  5. ==============================

    5.네

    CHAR는 고정 길이의 문자열을 저장하기 위해 사용되어야한다. 디스크에 저장하기 전에 문자열 값 공간 / 빈 패딩됩니다. 이러한 유형의 varibale 길이 문자열을 저장하는 데 사용되는 경우가 많은 디스크 공간을 낭비 할 것이다.

    VARCHAR2

    VARCHAR2는 가변 길이 문자열을 저장하는 데 사용됩니다. 문자열 값의 길이는 값 자체 디스크에 저장됩니다.

    At what times we use both?
    

    그것의 모든 귀하의 요구 사항에 따라 달라집니다.

  6. ==============================

    6.CHAR는 고정 된 길이의 문자 스트링을 저장하는데 사용된다. 이 유형이 가변 길이 문자열을 저장하는 데 사용되는 경우가 많은 디스크 공간을 낭비 할 것이다.

    CHAR는 고정 된 길이의 문자 스트링을 저장하는데 사용된다. 이 유형이 가변 길이 문자열을 저장하는 데 사용되는 경우가 많은 디스크 공간을 낭비 할 것이다.

    VARCHAR2는 가변 길이 문자열을 저장하는 데 사용됩니다.

    이것은 변화와 귀하의 요구 사항에 따라 달라질 수 있습니다.

    편집하다:-

    당신이 크기 10를 가진 학생의 이름 열이있는 경우, 예를 들어 이것을 이해할 수 있습니다; SNAME CHAR (10)과 열 값 'RAMA'가 삽입되어 있다면, 6 개 빈 공간 값의 오른쪽에 삽입한다. 이것은 VARCHAR 컬럼되었을 경우는 SNAME VARCHAR2 (10). 그런 다음 대 Varchar (10) 수의 4 개 공간을 꺼내 다른 사용을 위해 다음 6를 사용할 수있게됩니다.

  7. from https://stackoverflow.com/questions/20417845/what-is-the-major-difference-between-varchar2-and-char by cc-by-sa and MIT license