2011-02-27 4 views
2

PHP 등록 양식을 통해 MySQL에 사용자 정보를 추가하면 데이터 필드에 제한이 있습니다 (예 : 이름은 최대 20 자, 이메일 18 자, 추가 정보 200, 12자를 넘김)MySQL의 사용자 등록 양식 필드 크기는?

MySQL 테이블에 똑같은 필드를 만들어야합니까, 아니면 더 긴 필드를 정의해야합니까?

예를 들어 모든 문자열 입력란을 만들지 않고 어떤 이점이 있습니까? 500 자 길이?

나이를 정수로 저장할 때 작은 int (즉, 최대 256)를 사용해야하나요 그렇지 않은가요?

+0

연령을 제한적으로 제한하면 코드가 불멸의 상태가됩니다. –

+0

잠깐주의 : 데이터베이스에 비밀번호를 일반 텍스트로 사용하면 안됩니다. 그것을 md5 암호화하여 저장하십시오. – DKSan

+2

빠른 참고 사항 @DKSan : 암호를 저장하지 마십시오. MD5 해시. 그것은 암호화가 아니며 충분히 강하지도 않습니다. 더 나은 해시 함수를 사용하지만 더 중요한 것은 좋은 소금을 사용하는 것입니다. 그리고 더 중요한 것은 스트레칭을 잘하는 것입니다. 단지 md5 ($ password)를 사용하는 것이 더 안전하다고 생각하지 마십시오 ... – ircmaxell

답변

0

MyISAM 테이블 형식을 사용하는 경우 레코드 길이를 정적으로 유지하면 쿼리에 대해 좀 더 효율적입니다. 따라서 varchar 대신 고정 크기의 char 필드를 사용할 수 있다면 (레코드의 모든 필드가 정적 인 한) 더 좋습니다. 그러나 지정한 전체 문자 수가 메모리에서 차단되므로 메모리 사용이 더 중요한지 여부를 결정해야합니다.

1

일반적으로 중요한 것은 아닙니다. 중요한 부분은 서버 측의 정보를 검증하는 방법입니다.

  1. 입력 한 데이터가 열의 크기를 초과하지 않는지 확인하십시오. 그렇지 않다면 mysql이 자동으로 데이터를 잘라내는 문제에 부딪 힐 수있다.

  2. 암호 크기를 제한하지 마십시오. 다른 사람이 200 자의 암호를 입력하려는 경우 알려주십시오. 은 평문이 아닌 a storing hash에 저장해야하므로 정확한 길이로 차이가 나지 않습니다.

  3. 항상 데이터 형식을 올바르게 저장하십시오. 정수 나이를 예상 할 경우 정수 열에 저장하십시오. 문자열 열 유형에 저장할 이유가 없습니다.

  4. 한계의 나머지 부분까지는 응용 프로그램에 크게 좌우됩니다. 200 자 정보 제한이 예상되는 경우 VARCHAR(200)에 저장하십시오. 하지만 방금 가정 할 경우 TEXT 유형으로 저장하여 사용자가 원하는만큼 입력 할 수 있도록하십시오. 응용 프로그램이 거대하고 DB 대규모가 될 것입니다 않는하지만 그건 ... 더 응용 프로그램과 다른 무엇보다도 따라 사용 사례

0

있어,이 성능면에서 거의 중요합니다. 나중에 MySQL 최대 길이보다 등록 양식 최대 길이를 변경하는 것이 훨씬 쉽기 때문에 MySQL 필드에서 약간의 공간을 확보해야한다고 말합니다. 나이가 들면서 smallint를 사용하는 것이 좋습니다. 아니. 일반적으로 필드가 필요한 것보다 더 많은 공간을 차지하도록 허용해서는 안되지만, 만약을 대비하여 약간의 패딩을 제공 할 것입니다. 다시 말하지만, 그것이 큰 차이를 만들어서는 안됩니다.

1

귀하의 데이터베이스 열 길이 (귀하의 varchar)는 자유롭지 만, 귀하의 응용 프로그램에서는 크기/길이를 엄격히 적용 할 것을 강력히 권고하십시오.

시간이 지남에 따라 비즈니스 로직이 변경 될 수 있습니다. 애플리케이션 계층은 이러한 규칙을 지키고 시행합니다.

데이터베이스가 길이에 관한 비즈니스 규칙 변경에 자주 조정할 필요는 없습니다. varchar(100) 유형의 열을 정의해도 비용이 들지 않습니다. 길이는 최대 100까지 다양하므로 성능과 저장 장치가 전혀 손상되지 않습니다.

응용 프로그램 및 데이터베이스 변경/유지 관리가 비쌉니다. 데이터베이스 스토리지가 저렴합니다.

다른 어떤 구체적인 제안, 만약에 당신 :

  • age를 저장하지 않습니다. 수학 (Today-Birthdate)을 사용하여 날짜 (생년월일)에서 파생시킵니다.
  • 암호는으로 저장하거나 최대 길이를 가져야합니다!
  • 모든 문자열 필드 -이를 varchar(256) 또는 1024으로 정의하고 함께 처리하십시오. 귀하의 응용 프로그램이 당일의 비즈니스 규칙을 시행하게하십시오.
+0

* ** 비밀번호 **를 저장하거나 최대 길이 *를 가져서는 안된다는 것을 의미한다고 생각합니다. 지금 당장은 의미가 없습니다 ... – ircmaxell

+0

@ircmax : DOH! 그 오타를 가리켜 주셔서 감사합니다! –