SQL Server 2005에서 전화번호를 저장하기 위해 사용하는 데이터 유형은 무엇입니까?
테이블에 전화번호를 저장해야 해요.어떤 데이터 유형을 사용해야 하는지 제안해 주십시오.잠깐만요. 답장 누르기 전에 읽어주세요.
이 필드는 영업 담당자가 검색(와일드 문자 검색 포함)에 사용할 수 있으므로 많은 인덱스를 작성해야 합니다.
현시점에서는, 전화번호는 (XML 파일로부터) 몇개의 형식에서 취득할 수 있습니다.균일한 형식으로 변환하려면 파서를 작성해야 하나요?데이터(복제된 데이터)가 수백만 개일 수 있습니다.또, 일부의 소스 데이터가 송신될 때마다, 서버의 자원을 (과도한 전처리등의 액티비티로) 묶고 싶지 않습니다.
어떤 제안이라도 환영합니다.
업데이트: 소스 데이터를 제어할 수 없습니다. xml 파일의 구조가 표준입니다. xml 구문 분석을 최소한으로 유지하려고 합니다. 일단 데이터베이스에 저장되면, 검색은 빨라질 것입니다. Ajax Auto Complete 기능(판매 담당자가 일치하는 기능을 즉시 확인할 수 있도록)에서도 작동해야 한다는 말도 안 되는 제안이 있습니다. 아뿔싸!
여기에는 다음이 포함됩니다.
- 국제번호요?
- 내선번호?
- 실제 번호 이외의 정보(예를 들어 "바비를 묻는다" 등)
이 모든 것이 '아니오'인 경우 10글자 필드를 사용하여 숫자가 아닌 데이터를 모두 삭제합니다.첫 번째가 '예'이고 나머지 두 개가 '아니오'인 경우 두 개의 varchar(50) 필드를 사용합니다. 하나는 원래 입력용이고 다른 하나는 숫자가 아닌 모든 데이터가 스트라이핑되어 인덱싱에 사용됩니다.2 또는 3이 맞다면 두 개의 필드와 미친 파서를 수행하여 확장 또는 기타 데이터가 무엇인지 확인하고 적절하게 처리합니다.물론 인덱스를 작성할 때 인덱스를 사용하여 추가 문자를 삭제하는 방법으로 두 번째 열을 피할 수 있지만, 두 번째 열을 만들면 트리거로 문자를 제거할 수 있습니다.
업데이트: AJAX 문제에 대처하려면 생각보다 나쁘지 않을 수 있습니다.이것이 실제로 테이블에 대해 수행되는 주요 방법일 경우 앞서 말한 대로 보조 열에 숫자만 저장한 다음 해당 열의 인덱스를 클러스터화하십시오.
varchar(15)를 사용하여 해당 필드에 인덱스를 붙입니다.
그 이유는 국제 표준이 최대 15자리까지 지원할 수 있기 때문입니다.
국제번호를 지원하는 경우 예를 들어 반송된 콜을 미국으로 제한하기 위해 전화 번호 필드의 길이를 구문 분석 및 체크하지 않도록 쿼리를 필터링하기 위해 월드 존 코드 또는 국가 코드를 별도로 저장하는 것을 권장합니다.
미국 전화번호만 저장하는 경우 CHAR(10)을 사용하십시오.숫자를 제외한 모든 숫자를 제거합니다.
당연한 걸 놓치고 있는 것 같은데, 가장 오래 기대했던 전화번호에 딱 맞는 Varchar가 잘 되지 않을까요?
만약 제가 명백한 것을 놓쳤다면, 누군가 그것을 지적해 주었으면 합니다.
나는 varchar(22)를 사용한다.북미 전화번호랑 내선번호가 붙어있을 만큼 크죠귀찮은 '(', '), '-' 문자를 모두 삭제하거나 하나의 통일된 형식으로 해석할 수 있습니다.
알렉스야.
nvarchar는 전처리를 통해 최대한 표준화할 수 있습니다.확장자를 추출하여 다른 필드에 저장할 수 있습니다.
SQL Server 2005는 색인화된 varchar 필드의 텍스트에 대한 하위 문자열 쿼리에 매우 적합합니다.2005년에는 인덱스 필드의 문자열 요약에 새로운 통계 정보가 도입되었습니다.이렇게 하면 전체 텍스트 검색에 큰 도움이 됩니다.
varchar를 사용하는 것은 매우 비효율적입니다.money type을 사용하여 money type에서 사용자 선언 type "money enumber"를 만들고 양수만 허용하도록 규칙을 만듭니다.
(19,4)라고 선언하면 4자리 내선번호를 저장할 수 있고 국제번호를 저장할 수 있으며 저장공간은 9바이트에 불과합니다.또한 인덱스는 속도가 빠릅니다.
데이터를 정규화한 다음 varchar로 저장합니다.정상화는 까다로울 수 있습니다.
한 번만 히트하면 돼그리고 새로운 기록이 들어오면 정규화된 데이터와 비교해야 합니다.매우 빠를 겁니다.
다양한 전화번호 형식(내선번호 등)에 대응해야 하므로 다른 변수와 동일하게 취급하는 것이 가장 적절할 수 있습니다.입력을 제어할 수 있다면 데이터를 더 유용하게 만들기 위해 여러 가지 방법을 사용할 수 있지만 그렇게 들리지 않습니다.
일단 당신이 그것을 다른 문자열과 같이 다루기로 결정한다면, 당신은 나쁜 데이터, 알 수 없는 전화번호 형성, 그리고 다른 어떤 것이라도 나타나는 것과 같은 피할 수 없는 문제들을 극복하는데 집중할 수 있다.문제는 데이터를 어떻게 저장하느냐가 아니라 데이터에 대한 좋은 검색 전략을 구축하는 것입니다.수집을 제어할 수 없는 대량의 데이터를 처리해야 하는 것은 항상 어려운 작업입니다.
SSIS를 사용하여 정보를 추출 및 처리합니다.이렇게 하면 XML 파일을 SQL Server에서 분리할 수 있습니다.필요에 따라서, 다른 서버상에서 SSIS 변환을 실시할 수도 있습니다.VARCHAR을 사용하여 전화번호를 표준 형식으로 저장합니다.NVARCHAR는 숫자나 '+', '(', '), '-'와 같은 몇 개의 다른 문자를 말하고 있기 때문에 불필요합니다.
를 사용하다varchar
필드에 길이 제한이 있습니다.
내선번호를 나타내기 위해 "x" 또는 "ext"를 사용하는 것은 매우 일반적이므로 15자(전체 국제 지원) + 3자(ext) + 4자(내선번호 자체의 경우)를 사용할 수 있습니다.그래야 안전할 거야
또는 입력으로 정규화하면 모든 "ext"가 "x"로 변환되어 최대 20이 됩니다.
전화번호와 같은 다중값 속성에는 항상 별도의 테이블을 사용하는 것이 좋습니다.
소스 데이터에 대한 제어가 없기 때문에 XML 파일에서 데이터를 해석하여 특정 국가의 형식에 문제가 없도록 적절한 형식으로 변환하고 다른 테이블에 저장하여 인덱싱과 검색을 효율적으로 수행할 수 있습니다.
감사해요.
이 스레드가 오래된 것은 알지만 포맷을 위해 숫자 유형으로 저장하는 장점, 특히 에 언급할 필요가 있습니다.NET 프레임워크
IE
.DefaultCellStyle.Format = "(###)###-####" // Will not work on a string
대신 데이터 유형을 길게 사용하십시오.int 는 -32,768 ~32,767 의 정수만을 사용할 수 있기 때문에 사용하지 않습니다.단, 긴 데이터 타입을 사용하는 경우 -2,146,483,648 ~2,147,483,647 사이의 숫자를 삽입할 수 있습니다.
대부분의 경우, 그것은 비긴트로 이루어질 것이다.
19876543210, 02125551212 등 포맷되지 않은 전화번호를 저장하기만 하면 됩니다.
bigint vs varchar에 대한 항목 확인
언급URL : https://stackoverflow.com/questions/75105/what-datatype-should-be-used-for-storing-phone-numbers-in-sql-server-2005
'programing' 카테고리의 다른 글
64비트 Windows에서 64비트 DLL이 System32로, 32비트 DLL이 SysWW64로 이동하는 이유는 무엇입니까? (0) | 2023.04.10 |
---|---|
Linux에서 특정 텍스트(문자열)가 포함된 모든 파일을 찾는 방법 (0) | 2023.04.10 |
Gem 설치 오류:먼저 개발 도구를 설치해야 합니다(Windows). (0) | 2023.04.10 |
IList 또는 IENumerable에서 쉼표로 구분된 목록 생성 (0) | 2023.04.10 |
iOS 앱, 프로그래밍 방식으로 빌드 버전 가져오기 (0) | 2023.04.10 |