전화번호 및 주소의 mysql 데이터 유형
국가 코드, 내선 번호를 포함한 형식으로 전화 번호를 입력하려고 합니다.
create table if not exists employee( `
country_code_tel int(11),
tel_number int(10),
extension int(10),
mobile bigint(20)
);
경우 수 은 tel_number 15를 사용하는.Bigint(20)
create table address(
address varchar(255),
city varchar(255),
country varchar(255),
post_code int(11)
);
예를 들어 캐나다 국가 코드가 있으면 +2 또는 002를 사용할 수 있습니다.가공에는 어떤 것이 더 좋습니까?
조언해 주셔서 감사합니다.
글쎄요, 저는 개인적으로 전화번호나 관련 정보를 저장할 때 숫자 데이터 유형을 사용하지 않습니다.
001234567이라는 번호는 어떻게 저장하나요?결국 1234567이 되고 선행 0을 잃게 됩니다.
물론 언제든지 왼쪽 패드를 붙일 수 있지만, 숫자가 정확히 몇 자리인지 알고 있어야 합니다.
은 투고 답변이 .
만 주세요.
실제로 전화번호는 Varchar를 사용할 수 있습니다.int는 필요 없습니다.숫자에 대한 연산을 수행하지 않기 때문입니다.
('숫자와 '합니다.TinyText
255개 이상의 항목이 필요하지 않은 유형입니다.
파일을 보존하기 전에, 전화 번호를 해석하고, 사용되고 있는 포맷을 취득해, 마스크를 작성하면, 숫자만을 보존합니다.예를 들어, 예를 들면, 다음과 같습니다.
력::(0123) 456 7890
호::01234567890
스크::(nnnn)_nnn_nnnn
이론적으로는 사용자가 어떻게 입력했는지 걱정할 필요 없이 특정 지역번호로 시작하는 모든 전화번호를 취득하는 등 번호 필드에서 비교 검색을 수행할 수 있습니다.
저는 보통 전화번호를 BIGINT로 E164 형식으로 저장합니다.
E164는 0으로 시작하지 않습니다.처음 몇 자리는 국가 코드입니다.
+441234567890
+44 (0)1234 567890
01234 567890
would would would would would would would would would would 로 저장됩니다.441234567890
.
나는 전화번호에 varchar를 사용할 것이다.이 방법으로 + 및()를 저장할 수도 있습니다.이것은, 전화 번호에 표시되는 경우가 있습니다(자신이 말한 대로).정수의 모든 비트를 사용할 염려가 없습니다.
정수를 사용하는 것이 좋은 생각인지 잘 모르겠어요.번호에 따라서는, 특수 문자(내선 번호의 일부로서 #)를 사용할 수 있는 경우도 있습니다.그래서 나는 대신 varchars를 사용하는 것을 추천한다.
저장된 레코드가 100만 개 미만이고 고성능이 varchar(20)/char(20)에 문제가 되지 않는다면 1억 개의 글로벌 비즈니스 폰이나 개인 폰이라도 저장하는 것이 가장 좋다는 것을 알게 되었습니다.이유: 키가 작을수록 읽기/쓰기 속도가 빨라집니다.포맷을 지정하면 중복이 발생할 수 있습니다.
char (20) = 20 바이트와8 바이트의 전화 1대bigint
(또는 10 대 4 바이트)int
로컬 전화의 경우 최대 9자리), 인덱스블록 => 더 많은 블록 => 더 많은 검색을 입력할 수 있는 엔트리가 적습니다.자세한 것에 대하여는, 이것을 참조해 주세요(Mysql 의 경우는, 다른 릴레이셔널 데이타베이스의 경우는 유효합니다).
전화 테이블의 예를 다음에 나타냅니다.
CREATE TABLE `phoneNrs` (
`internationalTelNr` bigint(20) unsigned NOT NULL COMMENT 'full number, no leading 00 or +, up to 19 digits, E164 format',
`format` varchar(40) NOT NULL COMMENT 'ex: (+NN) NNN NNN NNN, optional',
PRIMARY KEY (`internationalTelNr`)
)
DEFAULT CHARSET=ascii
DEFAULT COLLATE=ascii_bin
또는 삽입 전 처리/수정 시 (2+2+4+1 = 9바이트)
CREATE TABLE `phoneNrs` (
`countryPrefix` SMALLINT unsigned NOT NULL COMMENT 'countryCode with no leading 00 or +, up to 4 digits',
`countyPrefix` SMALLINT unsigned NOT NULL COMMENT 'countyCode with no leading 0, could be missing for short number format, up to 4 digits',
`localTelNr` int unsigned NOT NULL COMMENT 'local number, up to 9 digits',
`localLeadingZeros` tinyint unsigned NOT NULL COMMENT 'used to reconstruct leading 0, IF(localLeadingZeros>0;LPAD(localTelNr,localLeadingZeros+LENGTH(localTelNr),'0');localTelNr)',
PRIMARY KEY (`countryPrefix`,`countyPrefix`,`localLeadingZeros`,`localTelNr`) -- ordered for fast inserts
)
DEFAULT CHARSET=ascii
DEFAULT COLLATE=ascii_bin
;
또, 「전화 번호는 번호가 아니다」라고 하는 것은, 전화 번호의 종류와 관련이 있다고 생각합니다.내장 휴대폰 북을 말하는 경우, 사용자가 GSM 해시 코드를 저장하기를 원할 수 있으므로 문자열은 문제 없습니다.E164 전화기를 보관하고 있는 경우는, bigint 가 최적인 옵션입니다.
E.164 포맷으로 정규화하는 것을 검토해 주세요.완전한 국제 지원을 위해서는 15자리 VARCHAR이 필요합니다.
전화번호 현지화에 대한 자세한 내용은 Twilio 권장사항을 참조하십시오.
INT(10)는 10자리 숫자가 아니라 표시 너비가 10자리인 정수를 의미합니다.MySQL의 INT 최대값은 2147483647(부호가 없는 경우 4294967295)입니다.
INT 대신 BIGINT를 사용하여 숫자로 저장할 수 있습니다.BIGINT를 사용하면 VARCHAR(10)보다 행당 3바이트가 절약됩니다.
국가 + 지역 + 번호를 별도로 저장하기 위해.VARCHAR(20)를 사용하면, 필요에 따라서 국제 전화 번호를 적절히 보존할 수 있습니다.
varchar나 text는 휴대폰 번호 저장에 가장 적합한 데이터 유형이라고 생각합니다.
필드 내의 숫자로만 입력을 제한할 수 있습니다.KeyPress
이벤트, 그 후 삽입하면,Insert Into Table
명령어에 + 를 추가합니다.
간단한 수정
언급URL : https://stackoverflow.com/questions/1846254/mysql-datatype-for-telephone-number-and-address
'programing' 카테고리의 다른 글
stdlib 및 컬러 출력(C) (0) | 2022.11.23 |
---|---|
Windows에서 동시에 실행되는 여러 Java 버전 (0) | 2022.11.23 |
PHP에서 쿼리 문자열을 사용하여 현재 URL 경로 가져오기 (0) | 2022.11.23 |
Maven Update Project는 이클립스에서 무엇을 합니까? (0) | 2022.11.23 |
MySql: Tinyint (2)와 Tinyint (1)의 차이점은 무엇입니까? (0) | 2022.11.23 |