[sql] URL에 가장 적합한 데이터베이스 필드 유형

MySQL 테이블에 URL을 저장해야합니다. 길이가 정해지지 않은 URL을 보유 할 필드를 정의하는 가장 좋은 방법은 무엇입니까?



답변

  1. 널리 사용되는 웹 브라우저 중 최소 공통 분모 최대 URL 길이 : 2,083 (Internet Explorer)

  2. http://dev.mysql.com/doc/refman/5.0/en/char.html
    VARCHAR 열의 값은 가변 길이 문자열입니다. 길이는 MySQL 5.0.3 이전에는 0에서 255 사이의 값으로, 5.0.3 이상에서는 0에서 65,535 사이의 값으로 지정할 수 있습니다. MySQL 5.0.3 이상에서 VARCHAR의 유효 최대 길이는 최대 행 크기 (모든 열간에 공유되는 65,535 바이트) 및 사용 된 문자 세트에 따라 달라집니다.

  3. 그래서 …
    <MySQL 5.0.3은 TEXT를 사용
    하거나
    > = MySQL 5.0.3은 VARCHAR을 사용합니다 (2083)


답변

VARCHAR(512)(또는 유사) 충분해야합니다. 그러나 문제가되는 URL의 최대 길이를 모르기 때문에로 직접 갈 수도 있습니다 TEXT. 이것의 위험은 물론 CLOB간단한 문자열 데이터 유형보다 훨씬 느리기 때문에 효율성이 떨어 집니다 VARCHAR.


답변

varchar(max) SQLServer2005 용

varchar(65535) MySQL 5.0.3 이상

이는 필요에 따라 스토리지를 할당하며 성능에 영향을 미치지 않아야합니다.


답변

URL 사용 빈도실제로 길이를 바인딩 해제 해야하는지 여부 에 따라 TEXT 또는 VARCHAR 열 중에서 선택하려고합니다 .

다음 과 같은 경우 micahwittman이 제안한 것처럼 maxlength> = 2,083 인 VARCHAR 을 사용하십시오 .

  1. 쿼리마다 많은 URL을 사용합니다 (TEXT 열과 달리 VARCHAR은 행과 일렬로 저장 됨)
  2. URL이 65,535 바이트의 행 제한을 초과하지 않을 것이라고 확신합니다.

다음과 같은 경우 TEXT를 사용하십시오 .

  1. URL은 실제로 65,535 바이트 행 제한을 초과 할 수 있습니다.
  2. 검색어는 한 번에 (또는 매우 자주) 여러 URL을 선택하거나 업데이트하지 않습니다. TEXT 열은 포인터를 인라인으로 유지하기 때문에 참조 된 데이터 검색과 관련된 임의의 액세스가 어려울 수 있습니다.

답변

ASCII 문자 인코딩과 함께 VARCHAR을 사용해야합니다. URL은 퍼센트로 인코딩되며 국제 도메인 이름은 punycode를 사용하므로 ASCII로 저장하기에 충분합니다. 이것은 UTF8보다 훨씬 적은 공간을 사용합니다.

VARCHAR(512) CHARACTER SET 'ascii' COLLATE 'ascii_general_ci' NOT NULL


답변

이것은 실제로 사용 사례에 따라 다르지만 (아래 참조) TEXT성능 문제가있는 상태로 저장하고 VARCHAR대부분의 경우 과잉 소리와 같은 큰 소리를냅니다.

내 접근 방식 :VARCHAR 과 같이 관대하지만 적당하지 않은 길이를 사용 하지 말고 VARCHAR(500)더 큰 URL이 필요한 사용자는와 같은 URL 단축기를 사용하도록 권장하십시오 safe.mn.

트위터 접근 방식 : 정말 멋진 UX를 위해 너무 긴 URL을위한 자동 URL 단축기를 제공하고 링크의 “표시 버전”을 끝에 타원이있는 URL의 스 니펫으로 저장하십시오. (예 : http://stackoverflow.com/q/219569/1235702로 표시되고 stackoverflow.com/q/21956...단축 URL에 연결됨 http://ex.ampl/e1234)

노트와주의 사항

  • 분명히 트위터 접근법은 더 좋지만 내 앱의 요구에 따라 URL 단축기를 권장하는 것으로 충분했습니다.
  • URL 단축기는 보안 문제와 같은 단점이 있습니다. 필자의 경우 URL이 공개적이지 않고 많이 사용되지 않기 때문에 큰 위험이 아닙니다. 그러나 이것은 분명히 모든 사람에게 적용되지는 않습니다. safe.mn은 많은 스팸 및 피싱 URL을 차단하는 것으로 보이지만 여전히주의를 기울이는 것이 좋습니다.
  • 사용자가 URL 단축기를 사용하도록 강요해서는 안됩니다. 대부분의 경우 (적어도 내 응용 프로그램의 요구에 따라) 대부분의 사용자가 사용하는 것에 500 자로 충분합니다. 너무 긴 링크에는 URL 단축기를 사용 / 권장하십시오.

답변

대부분의 브라우저는 URL매우 많은 양의 데이터 를 넣을 수있게 하므로 많은 것들이 매우 큰 URL을 생성하게되므로 URL의 도메인 부분 이외의 것에 대해 이야기하는 경우 TEXT 열을 사용해야합니다. VARCHAR / CHAR은 제한되어 있습니다.