사용자 이름, 암호 등 모든 정보를 저장하는 사용자 테이블을 만들고 있습니다. 제 질문은 UTF-8로 인코딩 된 테이블 또는 CHAR을 사용하여 VARCHAR에 사용자 이름을 저장하는 것이 더 좋습니까? char가 1 바이트이고 utf-8이 일부 문자에 대해 최대 3 바이트를 인 코드하기 때문에 데이터를 잃을 지 모르겠다. 이 경우에도 CHAR을 사용할 수 있습니까? 아니면 VARCHAR를 사용해야합니까? 일반적으로utf-8 인코딩을 사용하는 데이터베이스에서 char 또는 varchar가 더 좋습니까?
1
A
답변
2
는 규칙은 다음과 같은 경우에 CHAR
인코딩을 사용하는 것입니다 : 당신은 같은 길이를 (주 약어 생각)입니다 짧은 코드가
- .
- 길이가 다른 짧은 코드가있는 경우가 있지만 한 손으로 문자를 계산할 수있는 경우가 있습니다.
- 힘이들 때 -
CHAR
을 사용해야한다고 말할 수 있습니다. - 문자열 끝에 공백이 포함 된 채움이 예기치 않은 동작을 일으키는 것을 보여주고 싶을 때.
기타 경우에는 VARCHAR()
을 사용하십시오. 실제로 데이터베이스의 사용자는 문자열 끝에 공백이 있어야합니다.
+0
관련 팁 :'CHAR'에 대한 대부분의 경우는'CHARACTER SET ascii' (postal_code, country_code, md5 등) 일 수 있습니다. –
관련 문제
- 1. List 또는 Collection을 사용하는 것이 더 좋습니까?
- 2. javascript를 사용하는 블로거의 이상한 utf8 char 동작
- 3. 데이터 원본 뷰 또는 데이터베이스에서 관계를 정의하는 것이 더 좋습니까?
- 4. 성능면에서 무엇이 더 좋습니까? 목록, 또는 데이터베이스에서 정보를 얻고 싶습니까?
- 5. 하나의 데이터 변환 또는 여러 것을 사용하는 것이 더 좋습니까?
- 6. session_set_save_handler를 사용하는 것이 더 좋습니까?
- 7. RTC 또는 AccuRev가 더 좋습니까?
- 8. haskell에서 깨진 utf8 인코딩을 수정했습니다.
- 9. 어떻게 AFHTTPClient에 utf8 인코딩을 수행합니까?
- 10. 문자열에 utf8 디코드 또는 인코딩을 적용해야하는지 여부를 감지하는 방법은 무엇입니까?
- 11. 문자열에서 utf8 인코딩을 쉽게 감지하는 방법은 무엇입니까?
- 12. 키릴 문자에서 UTF8/라틴 문자 인코딩을 사용하는 NSString
- 13. 짹짹이 긁기 - 사이트 또는 API를 사용하는 것이 더 좋습니까?
- 14. JavaScript 개체 또는 외부에서 이벤트를 사용하는 것이 더 좋습니까?
- 15. GR32에서 TFloatPoint 또는 TFixedPoint를 사용하는 것이 더 좋습니까?
- 16. 이미지가 아닌 @ font-face 또는 cufon을 사용하는 것이 더 좋습니까?
- 17. DateTime.MinValue 또는 nullable DateTime을 사용하는 것이 더 좋습니까?
- 18. fwrite() 또는 move_uploaded_file()을 사용하는 것이 더 좋습니까?
- 19. 대기중인 작업이 대기열인지 또는 서비스를 사용하는 것이 더 좋습니까?
- 20. C#에서 "is"또는 "as"를 사용하는 것이 더 좋습니까?
- 21. BlackBerry에서 Bitmap 또는 EncodedImage를 사용하는 것이 더 좋습니까?
- 22. MongoDB : _id에 int64 또는 ObjectID를 사용하는 것이 더 좋습니까?
- 23. 메소드 서명에 클래스 또는 변수를 사용하는 것이 더 좋습니까?
- 24. jQuery fadeIn 또는 CSS3 애니메이션을 사용하는 것이 더 좋습니까?
- 25. Android에서 여러 SpanObject 또는 여러 TextView를 사용하는 것이 더 좋습니까?
- 26. 욕심 거리지 않는 한정어 또는 미리보기를 사용하는 것이 더 좋습니까?
- 27. 훑어보기 또는 캡처 그룹을 사용하는 것이 더 좋습니까?
- 28. 레이아웃 파일에 strings.xml 또는 텍스트 만 사용하는 것이 더 좋습니까?
- 29. HttpContext.Current.IsDebuggingEnabled 또는 #if DEBUG를 사용하는 것이 더 좋습니까?
- 30. MediaPlayer setDataSource, 경로 또는 FileDescriptor를 사용하는 것이 더 좋습니까?
'VARCHAR (x)'가 각 문자의 바이트 폭에 관계없이 최대'x' * 문자 *를 저장할 수 있다는 것을 깨닫지 못하는 것 같습니다 -'x' * 바이트에만 국한되지 않습니다. * ... 그리고'CHAR (x)'컬럼은 "단지 1 바이트"가 아니며, 그것은'x' 문자이며, 디스크에서 훨씬 비효율적입니다. 물론 사용자의 비밀번호를 "저장"해서는 안됩니다. –
어쩌면 나는 UTF-8 때문에 1 바이트 이상이있는 문자를 3 바이트로 인코딩하고 3 바이트가 1 바이트 인 CHAR에 맞는지를 알기 때문에 옳은 것을 묻고있는 것은 아닙니다. 대신 VARCHAR을 사용하십시오. 내가 실수하면 정정 해주세요. –
'CHAR'과'VARCHAR'의 크기는 바이트가 아닌 문자로 표현됩니다. 'CHAR (1)'은 1, 2 또는 3 바이트로 인코딩되었는지에 관계없이 정확히 1 * 문자 *를 저장할 수 있습니다. 'VARCHAR (1)'은 같은 제약을 받는다. 간단하게 단순화하는 것이 가장 큰 차이점은 모든 행의 값이 정확히 선언 된 길이가 아니라면'CHAR'는 디스크 나 메모리에서 효율적이지 않다는 것입니다. –