복붙노트

[SQL] SQL에서 VARCHAR을 통해 CHAR를 선택하는 사용 사례는 무엇입니까?

SQL

SQL에서 VARCHAR을 통해 CHAR를 선택하는 사용 사례는 무엇입니까?

내 모든 값이 고정 폭을하는 경우 CHAR 권장 실현. 그러나, 무엇 때문에? 단지 모든 텍스트 필드에 VARCHAR를 선택하지 왜 안전을합니다.

해결법

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

    1.모든 행 가까이 같은 길이로 사용할 경우에 일반적으로 CHAR을 선택합니다. 길이가 크게 변할 때 VARCHAR을 선택합니다. 모든 행이 동일한 길이 때문에 CHAR은 조금 더 빠를 수 있습니다.

    모든 행 가까이 같은 길이로 사용할 경우에 일반적으로 CHAR을 선택합니다. 길이가 크게 변할 때 VARCHAR을 선택합니다. 모든 행이 동일한 길이 때문에 CHAR은 조금 더 빠를 수 있습니다.

    DB는 구현에 따라 다르지만 일반적으로 VARCHAR 실제 데이터에 부가 (길이 또는 종결) 기억의 하나 또는 두 개 이상의 바이트를 사용한다. 그래서 단어 "는 foobar"저장 (당신이 1 바이트 문자 세트를 사용하는 가정)

    결론은 CHAR는 (두 문자 길이 차 내에서) 비교적 동일한 길이의 데이터를보다 신속하고 효율적인 공간 일 수있다.

    참고 : Microsoft SQL은 VARCHAR에 대한 오버 헤드의 2 바이트를 가지고있다. 이는 DB에서 DB에 따라 다르지만, 일반적으로 오버 헤드의 길이 또는 VARCHAR EOL을 나타내는데 필요한 최소한 1 바이트가된다.

    당신이 멀티 바이트를 사용하는 경우로는, 코멘트에 Gaven에 의해 지적되었다, 필요한 바이트의 UTF8 다음 CHAR 저장과 같은 가변 길이 문자 세트의 최대 수는 문자 수를 저장합니다. UTF8은 라틴 문자를 저장하는 경우에도 18 바이트로 고정됩니다 문자, 다음 CHAR (6)을 저장하기 위해 대부분의 3 바이트에 필요 그렇다면. 그래서이 경우 VARCHAR은 훨씬 더 나은 선택이된다.

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

    2.오라클과 함께 당신과 나있는 거 작업과 함께 작업하는 경우, 아마 당신은 거의 모든 상황에서 VARCHAR를 사용 할 것. 가정은 VARCHAR 이상의 문자가 사용하는 작은 처리 능력은 지금 ... 사실이 될 수 있다는 것을 ... 그러나 데이터베이스 엔진은 시간이 지남에 따라 호전과 일반적인 규칙의 종류는 미래의 "신화"의 제작을 가지고있다.

    오라클과 함께 당신과 나있는 거 작업과 함께 작업하는 경우, 아마 당신은 거의 모든 상황에서 VARCHAR를 사용 할 것. 가정은 VARCHAR 이상의 문자가 사용하는 작은 처리 능력은 지금 ... 사실이 될 수 있다는 것을 ... 그러나 데이터베이스 엔진은 시간이 지남에 따라 호전과 일반적인 규칙의 종류는 미래의 "신화"의 제작을 가지고있다.

    또 다른 한가지는 : 누군가가 VARCHAR로 가기로 결정 때문에 성능 문제를 본 적이 없다. 당신은 당신의 시간을 쓰기 좋은 코드의 더 나은 사용 (데이터베이스 적은 호출) 및 효율적인 SQL을 만들 것입니다 (어떻게 인덱스 작업을 수행, 최적화 메이크업 의사 결정을 수행하는 방법, 빠른 보통보다 존재 이유 ...).

    마지막 생각 : 나는 사람들이 ''그들이 찾고해야 할 때 ', 또는 그들이 FOO'를 찾고해야 할 때 사람들이 'FOO'를 찾고 '을 찾고, CHAR의 사용과 모든 종류의 문제를 볼 수있다 (여기서 공간의 무리) ', 또는 파워 빌더는 오라클 프로 시저에서 반환 값으로 2,000 공백까지 추가로 후행 공백, 또는 버그를 트리밍하지 명.

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

    3.성능상의 장점 이외에, CHAR 모든 값이 동일한 길이, 예를 들어, U.S. 상태 축약 열되어야 함을 나타 내기 위해 사용될 수있다.

    성능상의 장점 이외에, CHAR 모든 값이 동일한 길이, 예를 들어, U.S. 상태 축약 열되어야 함을 나타 내기 위해 사용될 수있다.

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

    4.숯불은 특정 길이, 사용 문자 될 것입니다 알고 당신이 열이 그렇다면, 조금 더 빠르다. 예를 들어, 성별 (남성 / (여성 / (알을 저장, 또는 미국 주 2 개 문자.

    숯불은 특정 길이, 사용 문자 될 것입니다 알고 당신이 열이 그렇다면, 조금 더 빠르다. 예를 들어, 성별 (남성 / (여성 / (알을 저장, 또는 미국 주 2 개 문자.

  5. ==============================

    5.합니까 NCHAR 또는 숯불는 VAR 대안 것을 더 잘 수행?

    합니까 NCHAR 또는 숯불는 VAR 대안 것을 더 잘 수행?

    좋은 질문입니다. 간단한 대답은 특정 상황에서 '예'입니다. 이 설명 할 수 있는지 보자.

    분명히 우리는 내가 VARCHAR (255)의 열이있는 테이블을 작성하는 경우 (의이 열 myColumn 부르 자)와 백만 행을 삽입하지만, 각 행에 대해 myColumn에 몇 문자를 넣어 모두 알고는, 테이블 전체 (더 작은 것 I는 문자 (255) 등을 생성 myColumn 않았다면보다 스토리지 엔진에 의해 필요한 데이터 페이지)의 수. 내가 마지막에 모든 "추가"공간을 이동할 필요가 없기 때문에 myColumn가 VARCHAR 인 경우 언제 내가 그 테이블 행을 많이 요청에 대한 조작 (DML)를 수행 더 빨리 될 것입니다. SQL Server가 별개의 또는 조합 작동 중에 같은 내부 종류의 작업을 수행 할 때와 같이, 이동, 또는 그것의 쿼리 계획 중에 병합을 선택하는 경우 등 이동 또한 내 로컬로 서버에서 데이터를 얻을하는 데 걸리는 시간을 의미 할 수있다 PC 나 다른 컴퓨터 나 어디든지가 소모 될 것입니다.

    그러나 VARCHAR를 사용하여 약간의 오버 헤드가있다. SQL Server는 특정 행의 myColumn 그것에서 가지고 얼마나 많은 바이트 알고, 각 행에,에 두 바이트 표시 등 (오버 헤드)를 사용한다. 그것은 문제가, 그것은 "디코드"모든 행에 myColumn에있는 데이터의 길이로 갖는이다 선물하는 추가 2 바이트 아니다.

    내 경험으로는 쿼리에 가입됩니다 컬럼에 사용하는 문자 대신 VARCHAR에 가장 의미가 있습니다. 예를 들어, 테이블의 기본 키 또는 인덱싱 될 다른 칼럼. 주문 테이블 디코딩 테이블 혹은 OrderNumber를 인구에 테이블 CUSTOMERNUMBER 또는 CodeID. 문자를 사용하여 쿼리 엔진은 더 빨리 오히려이 페이지를 읽고로의 포인터 바이트의 변수 금액을 이동하는 것보다 (결정 론적) 직선 포인터 연산을 할 수 있기 때문에 조인을 수행 할 수 있습니다. 나는 그 마지막 문장에 당신을 잃은 수 있습니다 알고 있습니다. SQL Server의 조인은의 아이디어를 기반으로하는 "조건." 술어는 조건이다. 예 myColumn = 1 또는 OrderNumber를 <500.

    SQL Server가 DML 문을 수행하고, 조건, 또는 "키"(문자) 고정 길이 있습니다에 결합되는 경우에 따라서, 쿼리 엔진에서 행을 하나 개의 테이블에서 행을 일치하도록 많은 일을 같이 할 필요가 없습니다 다른 테이블. 그것은 데이터가 행에 시간을 찾아 다음 끝을 찾을 문자열을 걸어 할 필요가 없습니다. 시간이 걸립니다보십시오.

    이제 마음이 쉽게 제대로 구현 될 수 곰. 나는 온라인 시스템의 기본 키 필드에 사용되는 문자를 보았다. 폭이 작은, 즉 문자 (15) 나 적당한 것을 계속해야한다. 수백만에 가입하는 것을 반대는 보통 그래서 당신은 결과 집합에 얻을 것이다 "RTRIM"그 후행 공백을 가진, 간단한 작업입니다 검색 또는 적은 수의 행을 upserting 때문에 그리고 온라인 시스템에서 가장 잘 작동합니다 한 테이블에서 다른 테이블의 행 수백만 행.

    CHAR의 차종은 ​​온라인 시스템에 VARCHAR를 통해 감지하는 또 다른 이유는 페이지 분할을 줄일 수 있다는 것입니다. 사용자가 나중에 나타나서 그 열 SQL에 둔다 더 많은 데이터가 이미 그것을하고가는 공간을 할당 한 경우 문자를 사용하여, 당신은 그래서 그 공간을 "예약"(및 낭비) 본질적으로.

    사용 CHAR 또 다른 이유는 두 번째 이유와 비슷합니다. 프로그래머 나 사용자가 예를 들어 메모 필드에 일부 문장을 추가, 수백만 개의 행에 "일괄"업데이 트를 수행하는 경우, 당신은 그들의 드라이브가 가득 이유를 궁금해 한밤중에 DBA에서 전화를받지 않습니다. 즉, 데이터베이스의 크기를 예측 성장에 이어집니다.

    그 그래서 VARCHAR를 통해 문자 혜택을 누릴 수 있습니다 3 가지 방법 온라인 (OLTP) 시스템이다. 일반적으로는 모든 문자 열이 낭비되는 공간을 많이까지 추가 할 수 있도록 많은 데이터를 가지고 있기 때문에 나는 좀처럼 창고 / 분석 / OLAP이 시나리오에서 문자를 사용하지 않습니다.

    문자가 데이터베이스가 훨씬 더 크게 만들 수 있지만 백업은 당신이 VARCHAR를 사용하는 것처럼 같은 크기 경향 때문에 대부분의 백업 도구는 데이터 압축을 가지고 있음을 유의하십시오. 예를 LiteSpeed를 또는 레드 게이트 SQL 백업하십시오.

    다른 용도는 고정 폭 파일에 데이터를 내보내기 위해 생성 전망이다. 하자 내가 메인 프레임에 의해 읽을 수 플랫 파일에 일부 데이터를 내보낼 수 있습니다 말한다. 이것은 폭이 고정된다 (분리되지 않음). 나는 길이가 해당 열에 대한 고정 폭의 폭에 대응하여, (따라서 내 데이터베이스에 공간을 적게 소모) VARCHAR로 내 "준비"테이블에 데이터를 저장 한 다음의 문자에 해당에 CAST의 모든 것에보기를 사용하려면 . 예를 들면 :

    create table tblStagingTable (
    pkID BIGINT (IDENTITY,1,1),
    CustomerFirstName varchar(30),
    CustomerLastName varchar(30),
    CustomerCityStateZip varchar(100),
    CustomerCurrentBalance money )
    
    insert into tblStagingTable
    (CustomerFirstName,CustomerLastName, CustomerCityStateZip) ('Joe','Blow','123 Main St Washington, MD 12345', 123.45)
    
    create view vwStagingTable AS
    SELECT CustomerFirstName = CAST(CustomerFirstName as CHAR(30)),
    CustomerLastName = CAST(CustomerLastName as CHAR(30)),
    CustomerCityStateZip = CAST(CustomerCityStateZip as CHAR(100)),
    CustomerCurrentBalance = CAST(CAST(CustomerCurrentBalance as NUMERIC(9,2)) AS CHAR(10))
    
    SELECT * from vwStagingTable
    

    이 VARCHAR를 사용하고 있기 때문에 내부적으로 내 데이터가 더 적은 공간을 차지하기 때문에이 멋지다. 내가 DTS 또는 SSIS 또는 단지 컷을 사용하고 메모장에 SSMS에서 붙여 넣을 때, 나는보기를 사용하여 후행 공백의 오른쪽 숫자를 얻을 수 있습니다. DTS에서 우리는 내가 "이 열을 제안한다"또는 뭔가 불렀다 생각이라는 기능이 잊지 저주하는 데 사용됩니다. SSIS에서 더 이상 할 수 없어, 당신은 지루하게 플랫 파일 연결 관리자를 정의해야합니다. 그러나 당신이 당신의보기 설정이 있기 때문에, SSIS는 각 열의 너비를 알 수 있으며, 데이터가 작업 흐름을 구축 할 때이 시간을 많이 절약 할 수 있습니다.

    결론 ... varchar를 사용 그래서. 이 문자를 사용하는 이유는 매우 소수이며, 이는 성능상의 이유로 단지입니다. 당신이 수백만 행의 hundrends있는 시스템이있는 경우 술어 (문자) 결정하지만, 문자는 단순히 공간을 낭비하고 사용하는 대부분의 시스템이 있다면 당신은 눈에 띄는 차이를 볼 수 있습니다.

    희망이 도움이. 제프

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

    6.이 성능상의 이점이 있지만, 여기에 언급되지 않은 하나입니다 행 마이그레이션. 문자를 사용하면 advance.So에서 전체 공간의 당신이 CHAR (1000)이라고하자 예약, 당신은 10 개 문자를 저장, 당신은 모든 공간 1,000 부르는 것들은를 사용합니다. VARCHAR2 (1000)에서는 10 개 문자를 사용합니다. 당신이 데이터를 수정할 때 문제가 온다. 하자가 지금 900 개 문자를 포함하는 열을 업데이트 말한다. VARCHAR을 확장 할 수있는 공간이 현재 블록에서 사용할 수없는 가능성이 있습니다. 이 경우, DB 엔진은 다른 블록에 행을 마이그레이션해야하고, 새로운 블록에 새로운 행에 원래의 블록에 대한 포인터를합니다. 이 데이터를 읽으려면 DB 엔진은 이제 2 개 블록을 읽을 수있을 것이다. 아무도 equivocally 그 VARCHAR 또는 문자가 더 나은 말할 수 있습니다. 데이터가 업데이트됩니다 여부의 시간 트레이드 오프를위한 공간, 배려는 성장할 좋은 기회가 특히있다.

    이 성능상의 이점이 있지만, 여기에 언급되지 않은 하나입니다 행 마이그레이션. 문자를 사용하면 advance.So에서 전체 공간의 당신이 CHAR (1000)이라고하자 예약, 당신은 10 개 문자를 저장, 당신은 모든 공간 1,000 부르는 것들은를 사용합니다. VARCHAR2 (1000)에서는 10 개 문자를 사용합니다. 당신이 데이터를 수정할 때 문제가 온다. 하자가 지금 900 개 문자를 포함하는 열을 업데이트 말한다. VARCHAR을 확장 할 수있는 공간이 현재 블록에서 사용할 수없는 가능성이 있습니다. 이 경우, DB 엔진은 다른 블록에 행을 마이그레이션해야하고, 새로운 블록에 새로운 행에 원래의 블록에 대한 포인터를합니다. 이 데이터를 읽으려면 DB 엔진은 이제 2 개 블록을 읽을 수있을 것이다. 아무도 equivocally 그 VARCHAR 또는 문자가 더 나은 말할 수 있습니다. 데이터가 업데이트됩니다 여부의 시간 트레이드 오프를위한 공간, 배려는 성장할 좋은 기회가 특히있다.

  7. ==============================

    7.초기 성능 최적화 및 규칙의 모범 사례 유형을 사용하는 차이가 있습니다. 당신은 항상 고정 길이 필드가 어디에 새로운 테이블을 작성하는 경우, 그것은 사용 CHAR에 대한 감각, 당신이 케이스에 사용되어야한다. 이것은하지 조기 최적화, 오히려 엄지 손가락 (또는 모범 사례)의 규칙을 구현하는 것입니다.

    초기 성능 최적화 및 규칙의 모범 사례 유형을 사용하는 차이가 있습니다. 당신은 항상 고정 길이 필드가 어디에 새로운 테이블을 작성하는 경우, 그것은 사용 CHAR에 대한 감각, 당신이 케이스에 사용되어야한다. 이것은하지 조기 최적화, 오히려 엄지 손가락 (또는 모범 사례)의 규칙을 구현하는 것입니다.

    즉 - 당신은이 편지의 상태 필드를 사용 CHAR (2)가있는 경우. 당신이 실제 상태 이름을 가진 필드가있는 경우, VARCHAR를 사용합니다.

  8. ==============================

    8.2 개 문자 길이 항상 유효한 미국의 목록 자주 변경되지 않는 코드를 말한다 : - 미국 상태 코드와 같은 열 저장 고정 된 값이되지 않는 한 나는 VARCHAR를 선택한다.

    2 개 문자 길이 항상 유효한 미국의 목록 자주 변경되지 않는 코드를 말한다 : - 미국 상태 코드와 같은 열 저장 고정 된 값이되지 않는 한 나는 VARCHAR를 선택한다.

    다른 모든 경우에도 (길이 고정) 해시 암호를 저장하는 것처럼, 나는 VARCHAR를 선택한다.

    왜 - comparation 내부 값 'ABC'와 CHAR (5)로 정의 열 my_column있게 유형 열은 항상 공백으로 성취 문자 :

    my_column = 'ABC' -- my_column stores 'ABC  ' value which is different then 'ABC'
    

    그릇된.

    이 기능은 개발 기간 동안 많은 자극 버그로 이어질 수 있고 더 열심히 테스트합니다.

  9. ==============================

    9.해당 필드에있는 모든 데이터 값이 동일한 길이의 경우 CHAR은 VARCHAR보다 적은 저장 공간을 차지합니다. 당신은 문자로으로 VARCHAR를 변환하면 지금은 아마도 2009 년 8백기가바이트 데이터베이스는 810기가바이트 모든 의도와 목적을 위해 동일하지만, 짧은 문자열 (1 또는 2 자)를 들어, CHAR 아직도 내가 말할 것이라고 업계 "모범 사례"입니다.

    해당 필드에있는 모든 데이터 값이 동일한 길이의 경우 CHAR은 VARCHAR보다 적은 저장 공간을 차지합니다. 당신은 문자로으로 VARCHAR를 변환하면 지금은 아마도 2009 년 8백기가바이트 데이터베이스는 810기가바이트 모든 의도와 목적을 위해 동일하지만, 짧은 문자열 (1 또는 2 자)를 들어, CHAR 아직도 내가 말할 것이라고 업계 "모범 사례"입니다.

    당신은 대부분의 데이터베이스도 혼자 정수 (비트, 작은, INT, BIGINT) 제공 데이터 유형의 다양한 보면 이제 다른 통해 하나를 선택하는 이유가있다. 간단히마다 BIGINT 선택하면 실제로 목적과 필드의 사용에 약간의 무지되고 있습니다. 필드는 단순히 년 동안 사람의 나이를 나타내는 경우 BIGINT은 과잉이다. 지금은 반드시 "잘못된"아니지만, 그것은 효율적 아니에요.

    그러나 VARCHAR 대 해당 데이터베이스는 시간이 지남에 개선으로 흥미로운 인수하고,이를 주장 할 수 CHAR는 관련성이 적은 얻을 않습니다.

  10. ==============================

    10.나는 짐 McKeeth의 코멘트에 의해 서있다.

    나는 짐 McKeeth의 코멘트에 의해 서있다.

    테이블은 CHAR 컬럼이있는 경우 또한, 인덱싱 및 전체 테이블 스캔 빠릅니다. 기본적으로 최적화는 모든 VARCHAR 컬럼의 크기 값을 확인 할 필요가하면서, CHAR 열이있는 경우에만 각 레코드가 얼마나 큰 예측할 수있을 것입니다.

    (물리적 디스크에 기록을 이동하려면 데이터베이스를 강제하기 때문에) 당신은 인덱스를 다시 데이터베이스를 강제 할 수 있습니다 이전 내용보다 큰 크기로 VARCHAR 열을 업데이트하면 게다가. 결코 일어나지 않을 것이다 CHAR 컬럼이있는 동안.

    테이블이 크다 않는 한 당신은 아마 성능 저하에 대해 걱정하지 않습니다.

    Djikstra의 지혜로운 말씀을 기억하십시오. 초기 성능 최적화는 모든 악의 뿌리입니다.

  11. ==============================

    11.많은 사람들이 당신이 알고있는 경우 CHAR를 사용하여 값의 정확한 길이는 몇 가지 장점이 있다고 지적했다. 당신이 '우리 그냥 호주에 첫 판매를 만들었다'고 판매에서 메시지를받을 때 CHAR (2) 오늘 대단한 우리를 저장하는 상태 동안, 당신은 고통의 세계에 있습니다. 난 항상 필드는 미래의 이벤트를 커버에 '정확한'추측하기보다는 할 필요가 생각하는 시간을 과대 평가 보냅니다. VARCHAR 나에게이 지역에 더 많은 유연성을 제공 할 것입니다.

    많은 사람들이 당신이 알고있는 경우 CHAR를 사용하여 값의 정확한 길이는 몇 가지 장점이 있다고 지적했다. 당신이 '우리 그냥 호주에 첫 판매를 만들었다'고 판매에서 메시지를받을 때 CHAR (2) 오늘 대단한 우리를 저장하는 상태 동안, 당신은 고통의 세계에 있습니다. 난 항상 필드는 미래의 이벤트를 커버에 '정확한'추측하기보다는 할 필요가 생각하는 시간을 과대 평가 보냅니다. VARCHAR 나에게이 지역에 더 많은 유연성을 제공 할 것입니다.

  12. ==============================

    12.나는 문자를 사용하지 않을 것입니다. 나는 많은 사람들이 토론을 했어 문자가 빠르다는 것을 그들은 항상 피곤 진부를 가져온다. 그럼 내가 말할 얼마나 빨리? 우리는 밀리 초 많은 방법 그렇다면, 여기에 대해 무슨 말을하는거야? 사람이 몇 밀리 초 더 빨리, 우리는 시스템에 수정 버그에 하드의 톤을 소개한다 주장 때문에 저를 말하는거야?

    나는 문자를 사용하지 않을 것입니다. 나는 많은 사람들이 토론을 했어 문자가 빠르다는 것을 그들은 항상 피곤 진부를 가져온다. 그럼 내가 말할 얼마나 빨리? 우리는 밀리 초 많은 방법 그렇다면, 여기에 대해 무슨 말을하는거야? 사람이 몇 밀리 초 더 빨리, 우리는 시스템에 수정 버그에 하드의 톤을 소개한다 주장 때문에 저를 말하는거야?

    그래서 여기에 당신이로 실행됩니다 몇 가지 문제가 있습니다 :

    당신이 사방 RTRIMS을 가지고 영원히 코드로 끝낼 수 있도록 모든 필드 패딩 될 것입니다. 이것은 또한 더 이상 필드에 거대한 디스크 공간 낭비이다.

    이제 당신은 단지 하나의 문자의 문자 필드의 전형적인 예를하지만 필드는 선택 사항입니다 가정 해 봅시다. 누군가가 해당 필드에 빈 문자열을 통과하면 그것은 하나 개의 공간이된다. 다른 응용 프로그램 / 프로세스를 쿼리 할 때 그들이 RTRIM 사용하지 않는 경우에 따라서, 그들은 하나 개의 공간을 얻을. 우리는 옵션 필드 및 휴식 일에, 단 하나 개의 공간 XML 문서, 파일 및 기타 프로그램, 디스플레이를 했어.

    그래서 지금 당신은 문자 필드에 널 (null) 및 비어 있지 않은 문자열을 전달하고 있는지 확인해야합니다. 그러나이 null의 올바른 사용이 아닙니다. 여기에 널 (null)의 사용이다. 당신은 공급 업체에서 파일을 얻을 말할 수

    이름 | 성별 | 도시

    밥 || 로스 앤젤레스

    성별 당신이 테이블에 밥, 빈 문자열과 로스 앤젤레스를 입력보다 지정되지 않은 경우. 이제 파일과 형식 변경을 얻을 성별이 더 이상 포함하지만, 과거에 있었던하고 있다고 할 수 있습니다.

    이름 | 도시

    밥 | 시애틀

    성이 포함되어 있지 않습니다 글쎄 지금은 널 (null)을 사용합니다. 으로 VARCHAR는 문제없이 지원합니다.

    반면에 숯불이 다릅니다. 당신은 항상 null을 보낼 수 있습니다. 만약 당신이 빈 문자열을 전송하는 경우, 당신은 거기에 공백이 필드 종료됩니다.

    나는 문자에서 개발의 약 20 년에 수정을했다 한 모든 버그와에 갈 수있다.

  13. ==============================

    13.열 값에 대한 실제 필요한 크기를 계산하고이 포함 된 VARCHAR을위한 공간을 할당에 약간의 작은 처리 오버 헤드는 숯불을 사용하고 히트를 피하기 위해 더 나은, 당신은 확실히 확인 값은 항상 얼마나 긴 그렇다면 있습니다.

    열 값에 대한 실제 필요한 크기를 계산하고이 포함 된 VARCHAR을위한 공간을 할당에 약간의 작은 처리 오버 헤드는 숯불을 사용하고 히트를 피하기 위해 더 나은, 당신은 확실히 확인 값은 항상 얼마나 긴 그렇다면 있습니다.

  14. ==============================

    14.그것은 성능 트레이드 오프 대 고전적인 공간입니다.

    그것은 성능 트레이드 오프 대 고전적인 공간입니다.

    MS SQL 2005 년 (중국어 즉, 문자 당 2 바이트를 필요로하는 lanuagues 또는 NVARCHAR) 대 Varchar는 가변 길이이다. 이 하드 디스크에 기록 된 후 행에 추가하는 경우는 데이터 파일의 단편화에 원래의 행과 리드 비 contigious 위치에 데이터를 찾을 것입니다. 이것은 성능에 영향을 미칠 것입니다.

    공간이 문제가되지 않는 경우에 따라서, 다음 숯불 더 나은 성능을하지만 당신은 데이터베이스 크기를 유지하려는 경우 다음으로 VARCHAR는 더 나은 아래로.

  15. ==============================

    15.나는 대 Varchar를 선택하지 이유는 아마이없는 사용자의 경우 생각합니다. 그것은 당신에게 유연성을 제공하고 respondants들에 의해 언급 된 바와 같이, 성능은 매우 특별한 상황을 제외하고 (구글 DBA의 반대) 우리 미어 인간이 차이를 느낄하지 않습니다 이제입니다.

    나는 대 Varchar를 선택하지 이유는 아마이없는 사용자의 경우 생각합니다. 그것은 당신에게 유연성을 제공하고 respondants들에 의해 언급 된 바와 같이, 성능은 매우 특별한 상황을 제외하고 (구글 DBA의 반대) 우리 미어 인간이 차이를 느낄하지 않습니다 이제입니다.

    이 DB 유형에있어 주목할 흥미로운 것은 가치는 sqlite가 (꽤 인상적인 성능과 함께 인기있는 미니 데이터베이스) 비행에 문자열 유형으로 데이터베이스에 모든 걸두고있다.

    나는 항상하는 VARCHAR 사용하고 보통은 훨씬 더 큰 내가 필요 strickly 것보다합니다. 예. FIRSTNAME 50, 당신은 왜 그냥 안전을 위해 말하는 것처럼.

  16. ==============================

    16.분열. 숯불 공간을 보유하고이 VarChar하지 않습니다. 페이지 분할은 VARCHAR에 대한 업데이 트를 수용해야 할 수 있습니다.

    분열. 숯불 공간을 보유하고이 VarChar하지 않습니다. 페이지 분할은 VARCHAR에 대한 업데이 트를 수용해야 할 수 있습니다.

  17. ==============================

    17.VARCHAR 값을 사용하는 경우 SQL Server는 문자를 사용하는 경우가 있음을 필요로하지 않는 반면 해당 열에 대한 몇 가지 정보를 저장하기 위해 행 당 추가로 2 바이트를 필요 그래서하지 않는

    VARCHAR 값을 사용하는 경우 SQL Server는 문자를 사용하는 경우가 있음을 필요로하지 않는 반면 해당 열에 대한 몇 가지 정보를 저장하기 위해 행 당 추가로 2 바이트를 필요 그래서하지 않는

  18. ==============================

    18.일부 SQL 데이터베이스에서 VARCHAR는 오프셋을 최적화하기 위해 최대 크기에게 패딩됩니다, 이것은 전체 테이블 스캔과 인덱스를 빠르게하는 것입니다.

    일부 SQL 데이터베이스에서 VARCHAR는 오프셋을 최적화하기 위해 최대 크기에게 패딩됩니다, 이것은 전체 테이블 스캔과 인덱스를 빠르게하는 것입니다.

    이 때문에, 당신은 (200)는 CHAR에 비해 VARCHAR (200)를 사용하여 모든 공간을 절약 할 수 없습니다

  19. ==============================

    19.CHAR (NCHAR) 및 VARCHAR (NVARCHAR를) 사용 방법 데이터베이스 서버는 데이터의 차이를 가져온다. 첫 번째 공백 후행 도입; SQL 서버 기능에서 LIKE 연산자를 사용할 때이 문제가 발생했습니다. 그래서 VARCHAR (NVARCHAR)를 사용하여 안전하게 모든 시간을 확인해야합니다.

    CHAR (NCHAR) 및 VARCHAR (NVARCHAR를) 사용 방법 데이터베이스 서버는 데이터의 차이를 가져온다. 첫 번째 공백 후행 도입; SQL 서버 기능에서 LIKE 연산자를 사용할 때이 문제가 발생했습니다. 그래서 VARCHAR (NVARCHAR)를 사용하여 안전하게 모든 시간을 확인해야합니다.

    예를 들어, 우리는 테이블 TEST가있는 경우 (ID INT, 상태 CHAR (1)), 당신은 목록에 기능은 다음과 같은 몇 가지 특정 값을 가진 모든 레코드를 쓰기 :

    CREATE FUNCTION List(@Status AS CHAR(1) = '')
    RETURNS TABLE
    AS
    RETURN
    SELECT * FROM TEST
    WHERE Status LIKE '%' + @Status '%'
    

    이 함수에서 우리는 우리가 함수 매개 변수의 기본을 둘 때 모든 행을 반환 것으로 예상하지만, 사실은 그렇지 않습니다. 문제를 해결합니다 VARCHAR로 @status 데이터 유형을 변경합니다.

  20. from https://stackoverflow.com/questions/59667/what-are-the-use-cases-for-selecting-char-over-varchar-in-sql by cc-by-sa and MIT license