MySQL 테이블에 URL을 저장해야합니다. 길이가 정해지지 않은 URL을 보유 할 필드를 정의하는 가장 좋은 방법은 무엇입니까?
TEXT
유형 에 따라 아래의 모든 답변을 읽는 것을 건너 뛰십시오. 결국 그것은 대부분의 사람들이 제안하는 것입니다. :) 물론, 당신은 인덱싱 또는 고유성을 필요로하는 경우, 가고 VARCHAR
있기 때문에, TEXT
캔 인덱싱되지 쉽게 것을 .
MySQL 테이블에 URL을 저장해야합니다. 길이가 정해지지 않은 URL을 보유 할 필드를 정의하는 가장 좋은 방법은 무엇입니까?
TEXT
유형 에 따라 아래의 모든 답변을 읽는 것을 건너 뛰십시오. 결국 그것은 대부분의 사람들이 제안하는 것입니다. :) 물론, 당신은 인덱싱 또는 고유성을 필요로하는 경우, 가고 VARCHAR
있기 때문에, TEXT
캔 인덱싱되지 쉽게 것을 .
답변:
널리 사용되는 웹 브라우저 중 최소 공통 분모 최대 URL 길이 : 2,083 (Internet Explorer)
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 바이트) 및 사용 된 문자 세트에 따라 달라집니다.그래서 ...
<MySQL 5.0.3은 TEXT를 사용
하거나
> = MySQL 5.0.3은 VARCHAR을 사용합니다 (2083)
VARCHAR(2083)
단지 사용 TEXT
.
VARCHAR(512)
(또는 유사) 충분해야합니다. 그러나 문제가되는 URL의 최대 길이를 모르기 때문에로 직접 갈 수도 있습니다 TEXT
. 이것의 위험은 물론 CLOB
간단한 문자열 데이터 유형보다 훨씬 느리기 때문에 효율성이 떨어 집니다 VARCHAR
.
varchar(max)
SQLServer2005 용
varchar(65535)
MySQL 5.0.3 이상
이는 필요에 따라 스토리지를 할당하며 성능에 영향을 미치지 않아야합니다.
max
필요에 따라 VARCHAR 크기를 늘리는 마술 ANSI SQL 지정자입니까, 아니면 예를 들어 메타 변수입니까?
URL 사용 빈도 및 실제로 길이를 바인딩 해제 해야하는지 여부 에 따라 TEXT 또는 VARCHAR 열 중에서 선택하려고합니다 .
다음 과 같은 경우 micahwittman이 제안한 것처럼 maxlength> = 2,083 인 VARCHAR 을 사용하십시오 .
다음과 같은 경우 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의 도메인 부분 이외의 것에 대해 이야기하는 경우 TEXT 열을 사용해야합니다. VARCHAR / CHAR은 제한되어 있습니다.
다른 브라우저에 대해서는 모르겠지만 IE7에는 HTTP GET 작업에 대한 문자 제한이 2083 자 입니다. 다른 브라우저에 하한이 없으면 2083보다 많은 문자가 필요한 이유를 알 수 없습니다.
(크기 측면에서) 의미 하는 varchar (max) 를 사용하는 것이 좋습니다 varchar (65535)
. 이렇게하면 더 큰 웹 주소가 저장되고 공간도 절약됩니다.
max 지정자는 varchar, nvarchar 및 varbinary 데이터 형식의 저장 기능을 확장합니다. varchar (max), nvarchar (max) 및 varbinary (max)를 통칭하여 큰 값 데이터 형식이라고합니다. 큰 값의 데이터 형식을 사용하여 최대 2 ^ 31-1 바이트의 데이터를 저장할 수 있습니다.
큰 값의 데이터 형식 사용에 대한 TechNet 의이 기사 를 참조하십시오.
varchar (max)
SQLServer 구문이며 MySQL에 적합하지 않습니다 (원래 질문에서와 같이). 또한 varchar (65535)
mysql에서 65535가 행의 최대 ASCII 문자 수이므로 다른 필드와 문자 집합에도 의존합니다.