programing

공통 MySQL 필드 및 해당 데이터 유형

luckcodes 2023. 1. 1. 12:14

공통 MySQL 필드 및 해당 데이터 유형

저는 이름, 성, 이메일, 전화번호를 저장하는 매우 작은 MySQL 데이터베이스를 구축하고 있으며 각 필드에 맞는 '완벽한' 데이터 유형을 찾기 위해 애쓰고 있습니다.완벽한 답이 없다는 것은 알지만, 이와 같이 일반적으로 사용되는 분야에는 공통의 규칙이 있을 것입니다.예를 들어 포맷되지 않은 미국 전화번호는 너무 커서 서명되지 않은 int로 저장할 수 없다고 판단하고 적어도 bigint여야 합니다.

이것은 다른 사람들이 유용하다고 생각할 것이기 때문에, 저는 위에서 언급한 분야에만 질문을 하고 싶지 않습니다.

공통 데이터베이스 필드에 적합한 데이터 유형은 무엇입니까?전화번호, 이메일, 주소 등의 필드

누군가가 이것보다 훨씬 더 나은 답변을 게시할 것입니다. 하지만 개인적으로는 어떤 정수 필드에도 전화번호를 저장하지 않겠다는 점을 강조하고 싶었을 뿐입니다. 주된 이유는 다음과 같습니다.

  1. 계산 같은 거 안 해도 되고요
  2. 조만간 누군가가 지역 번호에 괄호를 두르려고 할 것이다.

그러나 일반적으로는 다음과 같은 것을 거의 독점적으로 사용하고 있는 것 같습니다.

  • ID 또는 다른 ID를 참조하는 모든 항목에 대해 INT(11)
  • 타임스탬프의 DATETIME
  • VARCHAR(255자)로 255자 미만(페이지 제목, 이름 등)을 보증합니다.
  • 그 외 거의 모든 것에 대해 문자를 보냅니다.

물론 예외는 있지만, 대부분의 사건들이 여기에 포함된다는 것을 알게 되었습니다.

다음은 제가 사용하는 일반적인 데이터 유형입니다(단, 저는 프로가 아닙니다).

| Column           | Data type     | Note
| ---------------- | ------------- | -------------------------------------
| id               | INTEGER       | AUTO_INCREMENT, UNSIGNED                                                          |  
| uuid             | CHAR(36)      | or CHAR(16) binary                                                                |  
| title            | VARCHAR(255)  |                                                                                   |  
| full name        | VARCHAR(70)   |                                                                                   |  
| gender           | TINYINT       | UNSIGNED                                                                          |  
| description      | TINYTEXT      | often may not be enough, use TEXT 
                                     instead          
| post body        | TEXT          |                                                                                   |  
| email            | VARCHAR(255)  |                                                                                   |  
| url              | VARCHAR(2083) | MySQL version < 5.0.3 - use TEXT                                                  |  
| salt             | CHAR(x)       | randomly generated string, usually of 
                                     fixed length (x)    
| digest (md5)     | CHAR(32)      |                                                                                   |  
| phone number     | VARCHAR(20)   |                                                                                   |  
| US zip code      | CHAR(5)       | Use CHAR(10) if you store extended 
                                     codes      
| US/Canada p.code | CHAR(6)       |                                                                                   |  
| file path        | VARCHAR(255)  |                                                                                   |  
| 5-star rating    | DECIMAL(3,2)  | UNSIGNED                                                                          |  
| price            | DECIMAL(10,2) | UNSIGNED                                                                          |  
| date (creation)  | DATE/DATETIME | usually displayed as initial date of 
                                     a post                                       |  
| date (tracking)  | TIMESTAMP     | can be used for tracking changes in a 
                                     post                                        |  
| tags, categories | TINYTEXT      | comma separated values *                                                          |  
| status           | TINYINT(1)    | 1 – published, 0 – unpublished, … You 
                                     can also use ENUM for human-readable 
                                     values
| json data        | JSON          | or LONGTEXT       

제 경험상 이름/성 필드는 48자 이상이어야 합니다.말레이시아나 인도 등 일부 국가에서 온 이름이 완전한 형태로 매우 긴 것도 있습니다.

전화번호와 우편번호는 항상 숫자가 아닌 텍스트로 취급해야 합니다.통상적인 이유는 0으로 시작하는 포스트 코드가 있기 때문입니다.또한 일부 국가에서는 전화번호가0으로 시작하는 경우도 있습니다.하지만 진짜 이유는 숫자가 아니라 숫자로 이루어진 식별자이기 때문입니다(그리고 그것은 캐나다와 같은 우편번호에 문자가 있는 나라를 무시하는 것입니다).텍스트 필드에 저장합니다.

MySQL에서는 VARCHAR 필드를 사용하여 이러한 유형의 정보를 얻을 수 있습니다.게으르게 들리겠지만, 이것은 여러분이 적절한 최소 크기에 대해 너무 신경 쓸 필요가 없다는 것을 의미합니다.

가변 길이(이름, 이메일 주소)의 데이터를 다루게 되므로 VARCHAR을 사용하는 것이 좋습니다.은 VARCHAR 입니다.[field length]+ 1바이트, 최대 길이 255바이트이므로, 적당한 사이즈를 찾는 것에 큰 걱정은 없습니다.가장 긴 길이라고 생각되는 길이를 살펴본 후 두 배로 늘린 후 VARCHAR 제한으로 설정합니다.★★★★★★★★

저는 보통 이메일 필드를 VARCHAR(100)로 설정합니다.아직까지는 문제가 발생하지 않았습니다.VARCHAR(50)로 설정한 이름.

다른 사람이 말한 것처럼 전화번호와 우편번호는 실제로는 숫자값이 아닙니다.0 ~ 9 의 숫자를 포함한 문자열(경우에 따라서는!)이므로 문자열로 취급해야 합니다.VARCHAR(20)이면 충분합니다.

전화번호를 정수로 저장하는 경우 많은 시스템에서는 0으로 시작하는 숫자를 8진수(베이스 8) 번호로 간주합니다.따라서, 완전하게 유효한 전화번호 「0731602412」는, 10 진수 「124192010」로서 데이타베이스에 입력됩니다.

임의의 테이블 ID

: ★★★★INT(11).

MySQL 인덱스는 int 목록을 가장 빠르게 구문 분석할 수 있습니다.

임의의 보안

: ★★★★BINARY(x) , 「」BLOB(x).

BLOB(x)는 BLOB(x)는 16으로 BINARINARY(x)는 BLOB(x)는 BLOB(x)는 16입니다. 에서 취득하다binary use - ,, 、 、 용 -SELECT HEX(field)... ★★★★★★★★★★★★★★★★★」SELECT ... WHERE field = UNHEX("ABCD....").

임의의 날짜

: ★★★★DATETIME,DATE , 「」TIME.

「」를 사용합니다.DATETIME을가 있는 경우는, 「」로 .DATETIMEMySQL을 사용하다

무엇이든 진실-거짓

: ★★★★BIT(1)(MySQL 8 용 (). 이외의 경우는, 「 」, 「 」를 사용합니다.BOOLEAN(1).

BOOLEAN는 사실 가명입니다.TINYINT(1)는 실제로는 0 ~255(정확히 참/거짓은 아니죠?)를 저장합니다.

SUM()을 호출하고 싶은 모든 함수는 MAX() 또는 이와 유사한 함수로 지정됩니다.

: ★★★★INT(11).

의 필드는 VARCHAR에서 SUM()능능등등등등다다

1,000자를 초과하는 임의의 문자

용도: TEXT.

최대 한도는 65,535 입니다.

65,535자를 초과하는 임의의 문자

용도: MEDIUSTEXT.

최대 한도는 16,777,215 입니다.

16,777,215자를 초과하는 임의의 문자

용도: LONGTEXT.

최대 제한은 4,294,967,295 입니다.

이름, 성

VARCHAR(255).

UTF-8 문자는 표시 가능한 문자당 3자를 포함할 수 있으며 일부 문화권에서는 이름과 성을 구분하지 않습니다.또한, 문화권에서는 어떤 이름이 처음이고 어떤 이름이 마지막인지에 대해 이견이 있을 수 있다.이러한 필드의 이름을 지정해야 합니다.Person.GivenName ★★★★★★★★★★★★★★★★★」Person.FamilyName.

이메일주소

VARCHAR(256).

E-메일 패스의 정의는 1982년의 RFC821로 설정되어 있습니다.전자 메일의 최대 제한은 2001년에 RFC2821에 의해 설정되었으며, 이러한 제한은 2008년에 RFC5321에 의해 변경되지 않았습니다(섹션: 4.5.3.1. 사이즈 제한과 최소값 참조).RFC3696(2004년 발행)은 이메일 주소 제한을 잘못 인용하고 있습니다.320「info-only」, 「info-only」RFC로, 도입부에 의하면 「표준을 정의하지 않는다」라고 명시되어 있기 때문에, 무시해 주세요.

전화

: ★★★★VARCHAR(255).

전화번호가 언제 1800..., 1-800, 1-(800) 또는 1-(800)의 형태로 끝날지, 또는 "내선번호 42" 또는 "수잔 요청"으로 끝날지 알 수 없습니다.

우편번호

: ★★★★VARCHAR(10).

12345 ★★★★★★★★★★★★★★★★★」12345-6789이 입력을 지우려면 검증을 사용합니다.

URL

: ★★★★VARCHAR(2000).

공식 표준에서는 이보다 훨씬 긴 URL을 지원하지만, 최신 브라우저에서는 2,000자를 초과하는 URL을 지원하는 브라우저는 거의 없습니다.SO 답변 참조: 브라우저별로 URL의 최대 길이는 몇 개입니까?

가격.

: ★★★★DECIMAL(11,2).

11까지 올라갑니다.

저도 같은 일을 하고 있는데, 제가 한 일은 이렇습니다.

이름, 주소, 이메일 및 번호에 각각 이름이 있는 표를 사용했습니다.프라이머리 클러스터 키인 Name 테이블을 제외한 모든 항목의 외부 키인 ID 열.비즈니스 엔트리와 개인 엔트리를 허용하기 위해 LastName과 FirstName 대신 MainName과 FirstName을 사용했는데 그럴 필요가 없을 수도 있습니다.

이름32,000개 이상의 엔트리를 작성하지 못할 것이 확실하기 때문에 모든 테이블에서 ID 열은 작은 빈칸이 됩니다.그 외의 거의 모든 것은, 보존하는 것(생일, 코멘트, e-메일, 매우 긴 이름)에 따라, 20 ~ 200 의 범위의 varchar(n)입니다.어떤 종류의 물건을 보관하느냐에 따라 다릅니다.

숫자표는 내가 그것에서 벗어난 부분이다.이름이라는 라벨이 붙은 5개의 컬럼을 설정했습니다.ID, 전화번호, 국가코드, 내선번호 및 PhoneType.이름은 이미 논의했습니다.ID. Phone#은 다음과 같은 체크 제약 조건을 가진 varchar(12)입니다. CHECK(전화번호는 '0-9'[0-9]-[0-9]-[0-9]-[0-9]-[0-9]-[0-9]-[0-9]-[9]-[0-9]-[0-9]와 같습니다).이렇게 하면 원하는 데이터만 데이터베이스에 저장되고 데이터는 매우 일관되게 유지됩니다.내선번호와 국가번호는 nullable smallints라고 불렀지만 원한다면 varchar일 수 있습니다.PhoneType은 varchar(20)이며 늘은 아닙니다.

이게 도움이 됐으면 좋겠네요!

언급URL : https://stackoverflow.com/questions/354763/common-mysql-fields-and-their-appropriate-data-types