이러한 상황이 발생하면 안 되지만 보통 관계형 데이터베이스처럼 미리 설계했어야 하고 나중에 변경할 수는 없지만 전작의 부주의로 인해 , 사실, 그것은 단지 개인적인 과실이 아니라 주로 의사 소통상의 이유 때문입니다. 물론 결국 데이터베이스를 설계했기 때문에 여전히 나 자신을 비판해야합니다.
상황에 대해 이야기해 보겠습니다. MySQL 필드에 varchar 값 필드가 너무 짧게 설정되어 있고 30이 설정되어 있습니다. (varchar는 확장 가능하다는 것을 어렴풋이 기억합니다. 물론 현실은 나를 용납하지 않습니다. 막연하게) 그래서 데이터베이스 데이터가 변경되지 않은 상태로 유지되도록 하면서 varchar 필드의 길이를 동적으로 수정하는 방법밖에 찾을 수 없었습니다.
alter table 表名 modify column 字段名 varchar(数量);
이 기능은 매우 강력하지만 디자인할 때 이러한 문제를 피하는 것이 가장 좋다는 점을 모두에게 상기시켜 드립니다.
PS: mysql에서 varchar 길이 설정 문제
특정 항목이 varchar(50)
으로 설정되어 있으면 당연히 그렇습니다. for English 50
중국어는 어떻습니까?
UTF-8 중국어는 3바이트를 차지합니다
그럼 이 varchar(50)는 한자 16자만 저장할 수 있나요?
mysql varchar(50) 중국어, 영어 상관없이 50개가 저장됩니다.
MySQL5 문서에는 varchar(m) 가변 길이 문자열 과 같이 varchar 필드 유형을 설명합니다. M은 최대 열 길이를 나타냅니다. M의 범위는 0~65,535입니다. (VARCHAR의 실제 최대 길이는 가장 긴 줄의 크기와 사용된 문자 집합 에 따라 결정됩니다. 최대 유효 길이는 65,532바이트입니다.)
왜 이렇게 변했나요? MySQL 매뉴얼은 너무 불친절하다고 생각합니다. 왜냐하면 MySQL 5.1은 표준 SQL 사양을 준수하며 VARCHAR 값의 후행 공백을 삭제하지 않는다는 설명을 찾으려면 주의 깊게 읽어야 하기 때문입니다. VARCHAR은 1바이트 또는 2바이트 길이의 접두사 + 데이터로 저장됩니다. VARCHAR 열의 선언된 길이가 255보다 큰 경우 길이 접두사는 2바이트입니다.
그렇군요, 조금 알 것 같습니다. 하지만 구체적으로 길이가 255보다 클 경우 2바이트 길이 접두어를 사용한다고 하더군요. 초등학교 뺄셈 문제는 65535 - 2 = 65533입니다. 이 전문가들이 어떻게 계산했는지 모르니 일단 의구심을 가지겠습니다.
참고: UTF8 인코딩을 사용하여 테스트했는데 varchar의 최대 길이는 21854바이트입니다.
mysql 버전 5.0.45 및 데이터베이스 인코딩 utf8에서 테스트되었습니다. varchar의 가장 긴 정의는 21785입니다. 즉, 문자, 숫자, 한자 상관없이 21,785개만 배치할 수 있습니다.
추측: 최대 varchar 바이트는 65535이고, utf8은 3바이트 65535/3=21785로 한 문자를 인코딩합니다.
위 내용은 varchar의 길이를 동적으로 수정하는 MySQL의 방법을 분석합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!