2016-12-07 1 views
2

MS SQL 데이터베이스에 테이블을 가져 왔습니다. 테이블은 꽤 커서 데이터베이스를 거의 완전히 채 웁니다. 내가 사용한 가져 ​​오기 도구는 숫자 열을 varchar(50)으로 저장했지만 정수로 사용하려고합니다. 따라서 열을 int으로 변경했습니다.왜 열을 varchar (50)에서 int로 변경하면 더 많은 공간이 필요합니다.

alter table <my_table> alter column <my_column> int 

는 지금까지 내가 아는 한, int 열은 적은 디스크 공간을해야하지만, 위의 쿼리는 사용 가능한 공간이 부족의 오류에 실패합니다.

이 문제의 원인과 가능한 해결 방법은 무엇입니까?

+0

당신은 무엇을 의미합니까?'INT' 최대 2^31-1 (2,147,483,647)에, A는'VARCHAR은 (50)'가 될 것입니다 99999999999999999999999999999999999999999999999999'' – Lamak

+1

내가 후드 생각 ''까지 갈 수 있습니다 간다 다른 컬럼을 추가하고, 채우고, 마지막에 switcheroo를하십시오. 임시로 더 많은 공간을 제공 할 수 없습니까? –

+0

_ "가능한 모든 해결책이 있습니다."_ - 하드 드라이브를 정리하십시오. –

답변

4

정수 열은 4 바이트를 사용합니다. documentation 기준

하는 VARCHAR 컬럼의 크기는 쉽게 계산된다

저장 크기 + 2 바이트의 입력 데이터의 실제 길이이다. varchar의 ISO 동의어는 charvarying 또는 charactervarying입니다.

따라서 열이 대부분 한 자리 숫자로 구성되어 있으면 3 바이트 만 사용됩니다. NULL 값도 더 적은 값을 사용합니다 (두 개의 길이 바이트 만 생각합니다). 물론 이것은 smallint 또는 tinyint을 사용하여 더 많은 공간을 절약 할 수 있음을 나타냅니다.

+0

감사합니다. 내 열은 대부분 NULL이지만, 'smallint'보다 큰 값을 포함 할 수 있습니다. 따라서 답은 문제를 해결하는 것처럼 보입니다. 계산을 할 때'varchar'를두고'cast'를 사용하는 것이 좋은 생각이라고 생각하십니까? – pajonk

+0

@pajonk. . . 일반적으로 여기 또는 그곳의 한 바이트는 큰 문제가 아닙니다. 백만 개의 행이있는 경우 몇 메가 바이트의 추가 저장 용량 만 차지합니다. 나는 말해야한다 : * 때로는 변화를 가져 오지만, 일반적으로 이러한 최적화는 필요하지 않다. –

관련 문제