database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 2000 게시물 읽기
No. 2000
자료형의 크기를 늘려도 적용이 안되는 이유가 뭘가요?
작성자
janis
작성일
2005-06-02 11:26ⓒ
2005-06-02 12:11ⓜ
조회수
4,833

안녕하세요

SQL2000 에서 varchar(300)을 varchar(1000)으로 변경했습니다

바뀐거 확인후에 쿼리테스트해보면 여전히 256 만큼만 들어가고 나머지는 짤립니다

왜 이런걸가요?

테이블은 제가 처음부터 만든건 아닙니다

이럴땐 어디를 체크하는게 좋을가요?

오전내내 헤메고 있네요

답변 미리 감사드립니다

이 글에 대한 댓글이 총 11건 있습니다.

DataType의 300, 4000의 문제로 데이터가 짤린것은 아닙니다.

물론 그보다 크게 넣으면 data Truncate에러 메시지가 표시되기도 하는데요.

지금 말씀하시는 보기 옵션이니까요.

Query Analyze를 실행 

도구 -> 옵션 -> 결과

거기에서 중간쯤에 보면 결과당 최대 문자수가 나옵니다.

그걸 그렇게 키우시면 글이 다 보일겁니다.

 

그럼 화이팅하세요

 

여리님이 2005-06-02 12:28에 작성한 댓글입니다. Edit

답변 감사합니다 ^^

근데 쿼리분석기에서는 알려주신데로 하니까 제대로 보이는데 웹에서만 짤려서 보이네요 ㅠㅠ

왜 다가져 오지를 못하는지 ...

janis님이 2005-06-02 15:47에 작성한 댓글입니다. Edit

웹에서 짤리는 건 글쎄요.

data와 source를 봐야 정확히 말씀드릴수 있을 거 같습니다.

 

보통은 asp에서는 제대로 뿌려주는 걸로 알고 있습니다.

특별하게 길이 등을 고려하여 생략하지 않는다면요..

 

 

여리님이 2005-06-02 15:52에 작성한 댓글입니다. Edit

감사합니다 ^^

웹서버는 리눅스,PHP 이고 디비서버는 win2003,SQL2000 입니다

약간 이상한 조합.. ^^

할수없이 text로 수정했는데 공간낭비도 심하고 이유를 모르니까 영 찜찜하네요

늘 행복하세요~

janis님이 2005-06-02 18:57에 작성한 댓글입니다. Edit

text 는 16바이트 씩 커질수 있고

2^31 - 1 까지 쓸 수 있는 형태이지 않은가요?

현재 janis 님이 varchar(300) 이라고 잡아서 어느정도 데이터가 크다면

 

둘의 디스크 공간 사용률은 비슷할거 같은데요?

다른 생각 있으면 리플좀 부탁합니다.

 

또한 비교 연산이 안되어서 text 에서 조금 불편한데

substring 을 이용하여 image text 의 데이터 타입도 비교 할 수

있습니다.

^-^

석이님이 2005-06-06 01:21에 작성한 댓글입니다.
이 댓글은 2005-06-06 01:23에 마지막으로 수정되었습니다. Edit

제가 보기엔 varchar(300) 이 text로 간다는 것은 조금 더 고려해야 하지 않을까 생각합니다.

varchar또는 nvarchar는 8000 byte로 최대크기가 한정되어 있습니다.

text는 그 이상의 data를 표현할 때 사용하는 것이고

또한 text는 varchar의 datatype에 줄수 있는 문자관련함수가

적용되지 않을 수도 있습니다.

 

그런데 질문하신 분이 php를 사용했다는 것을 볼때 아마도

php에서 data를 가져오는 형식에서 mssql의 특정한 datatype은

255이상을 수용하지 않는듯합니다.

 

 

여리님이 2005-06-06 14:15에 작성한 댓글입니다. Edit

흠 이상해서 테스트 해보았습니다.

<html>
<head>
<title>minsouk' charTest</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<?php
$conn=odbc_pconnect("webmail","id","pass","");
$result=odbc_exec($conn,"Select top 10 chartest,varchartest from tblx with (nolock)");
while(odbc_fetch_row($result))
{

//===========================
$chartest = odbc_result($result,1);
$varchartest = odbc_result($result,2);

//===========================

echo $chartest."<br>";
echo substr($chartest,255,45)."<br>";
echo $varchartest."<br>";
echo substr($varchartest,255,45)."<br>";
}
odbc_close($conn);
?>
</body>
</html>

 

테스트 데이터 입력

==========================

create table tblx(
chartest char(300)
)
insert into tblx (chartest) values
('123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890')

select * from tblx

alter table tblx add
varchartest char(300)

insert into tblx (chartest, varchartest) values
('1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789thisisCharx',
'1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789thisisCharx')

 

 

결과

==========================

123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
678901234567890123456789012345678901234567890


1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789thisisCharx
6789012345678901234567890123456789thisisCharx


1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789thisisCharx
6789012345678901234567890123456789thisisCharx
1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789thisisCharx
6789012345678901234567890123456789thisisCharx

 

 

 

잘 되는데요 mssql2000, php  환경입니다.

진짜 안되면 여기 연락처 남겨주세요 제가 함 봐드리죠

안될리가 없는데요 .....

 

 

석이님이 2005-06-06 17:51에 작성한 댓글입니다.
이 댓글은 2005-06-07 08:37에 마지막으로 수정되었습니다. Edit

감사합니다

확실히 varchar 을 text 로 바꾸니 느리군요 ㅠㅠ

또 기존에 sql문중에 작동 안되는게 있어서 수정하느라 땀뺐습니다 ㅠㅠ

근데 text를 다시 varchar로는 변환이 안되더군요

너무 성급했던거 같은데 돌려놀 방법이 없네요

nvarchar 로 해볼생각을 미처 못했네요

varchar의 경우 한글같은 2바이트문자는 256이상 못가져올수 있다는군요 이럴때 쓰라는게 nvarchar 인거같은데 ...

석이님도 아마 한글로 테스트해보면 안될겁니다

희한한건 insert는 되는데 select 는 안되더군요

내일 출근후에 nvarchar 로 테스트 해볼생각입니다

다들 활기찬 한주 시작되세요~ ^^

 

janis님이 2005-06-06 23:34에 작성한 댓글입니다. Edit

그리고 저는 odbc_어쩌구() 함수가 아니라 mssql_저쩌거() 하는 함수를 사용했습니다 ^^

janis님이 2005-06-06 23:42에 작성한 댓글입니다. Edit

한글은 한자 2Byte

영문이나 숫자는 1Byte

 

nvarchar

nchar 는 유니코드를 위한 타입

 

한글은 유니코드 -_-

 

흠 그리고 text 타입에 대해서 substring 인가로 짤라서 아까 300자 였다고 했죠? text 타입의 300자를 잘라서

select into 명령어로 카피 하면 될껄요 아마 이건 테스트 해보지 않겠습니다.

 

 

그리고 앞서 테스트는 거짓말 이군요

varchar(1000) 에서도 255 까지 나오고 짤린다는 말이 있어서 테스트 한겁니다. 한글이라도 500자 스페이스 없이 들어갈건데 말이죠 -_-;

 

 

접근 api 는 상관 없을겁니다. 그게 다를때 마다 결과가 달랐으면 아마 망했을 겁니다. ^-^

 

그리고 쿼리 분석기에서 나오는데 정말 php에서 짤려서 나오던가요? 디비에는 들어 있는데 짤린다니.....할말이 없네요 -_- 그걸 nvarchar 로 바꾸면 해결이 될거 같다구요? 이상하네.....

 

뭐 해결한거 같으니 그만 적겠습니다.

 

데이터 타입에 관한 질문일때는 256 자인지 256 비트인지 한글 인지 영문이지 bit 인지 똑바로 물어야죠 앞에서 계속 바이트 바이트 하다가 뒤에서 256 자 이럼 힘들죠....-_-

 

이하 참고

 

create table tblx(
a text
)


insert into tblx(a) values('aaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccc');
select substring(a,0,10) as aaa into #tblx2 from tblx
select * from #tblx2

 

sp_rename

Changes the name of a user-created object (for example, table, column, or user-defined data type) in the current database.

Syntax

sp_rename [ @objname = ] 'object_name' ,
    
[ @newname = ] 'new_name'
    [ , [ @objtype = ] 'object_type' ]

석이님이 2005-06-07 08:32에 작성한 댓글입니다.
이 댓글은 2005-06-07 11:11에 마지막으로 수정되었습니다. Edit

우선 한글, 영문에서의 바이트와 varchar, nvarchar등의 n의 문제를 해결하셔야 할 듯합니다.

다들 아시듯 한글은 2바이트입니다.

그리고 영문은 1바이트이구요.

문자를 저장하는 가장 대표적인 칼럼이 char, varchar,

nchar, nvarchar등인데요.

각각의 특징은 있지만 제가 지금 이야기 하고자 하는 것은

n에 대한 해석입니다.

석이님의 말씀대로 n이 붙는 데이터 타입은

유니코드 형식입니다. 그런데 우리는 한글을 사용하고 있으므로

n의 해석은 한글로 합니다.

[그래서 저는  n을 national language로 해석합니다.]

그렇게 되면 varchar로 영문 256자를 지정한다는 것은

nvarchar는 한글 128자를 저장할 수 있다는 이야기입니다.

즉 이 이야기는 두 데이터 타입의 byte수는 같다는 것을 알게 될겁니다.

 

데이터가 짤려보인다고 했던 것 또한

제가 예상할 수 있는 부분은 세가지 정도입니다.

첫째 Em, 둘째 QA(Result view) 셋째 프로그램상에서 일겁니다.

처음 제가 말씀드린 부분은 QA에서 짤려보인다고 생각되어

그 부분에 대한 답을 하였으나 janis님은 프로그램에서의 문제로

짤렸던 것 같았네요.

그런데 이부분에 대한 답변도 석이님이 충분히 테스트하여 보여준거네요.

 

또한 ODBC나 mssql로 직접 연결하여도 결과를 보여주는 부분은 같습니다.

insert가 되는데 select가 안된다는 것은 이해하기 힘든 현상인데요 ^^

 

혹여 insert가 되었다면 그건 varchar, nvarchar, text의 문제가 아니라

program상의 문제가 아닐까 합니다.

mssql_...로 접속을 하셨다면 석이님이 주신 ODBCconnect으로 한번

해보시길 추천합니다.

 

 

여리님이 2005-06-07 12:57에 작성한 댓글입니다.
이 댓글은 2005-06-07 12:59에 마지막으로 수정되었습니다. Edit
[Top]
No.
제목
작성자
작성일
조회
2005데이타 내보내기를 자신의 컴퓨터에 하는 바람에... [1]
최중권
2005-06-05
3095
2004프로시저를 어떻게 삭제해야하나요 [1]
이혜선
2005-06-05
1885
2001... [5]
매커
2005-06-02
2594
2000자료형의 크기를 늘려도 적용이 안되는 이유가 뭘가요? [11]
janis
2005-06-02
4833
1999데이터베이스가 웜 대기상태입니다.
오상환
2005-06-02
2223
1998인덱스를 생성해야 하는데요 [1]
이헤선
2005-06-01
2387
1997PostgreSQL -> MSSQL2000으로 이동 포팅 (마이그레이션) [1]
김도일
2005-06-01
2075
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.016초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다