programing

MySQL 오류:최대 열 크기는 767바이트입니다.

lastcode 2023. 9. 14. 23:16
반응형

MySQL 오류:최대 열 크기는 767바이트입니다.

MySQL로 작업하는 프로그램을 실행하면 다음과 같은 오류 메시지가 나타납니다.

2015-06-10 15:41:12,250 ERROR app.wsutils 419 INCRON: 오류: ('HY000', '[HY000]] [MySQL]ODBC 5.2(w) 드라이버[mysqld-5.7.7-rc-log]색인 열 크기가 너무 큽니다.최대 열 크기는 767바이트입니다.(1709)(SQLExecDirectW)

이 에서 가 이 과 관련이 있을 수 있습니다.innodb_large_prefix선택.그러나 나는 이미 설정된 MySQL 5.7.7 RC를 사용하고 있습니다.innodb_large_prefix(MySQL Workbench에서 확인) "ON" 상태가 되어 최대 3072바이트를 허용합니다.t의 문제인지 잘 모르겠습니다.innodb_large_prefix그렇지 않으면.

어쨌든, 이 문제를 해결할 방법을 아는 사람이 있습니까?

Wamp 버전 3.2.6부터
이 파일을 편집하기만 하면 됩니다.C:\wamp64\bin\mysql\mysql8.0.27\my.ini에 대한 구성 변경innodb-default-row-format을 매김
innodb-default-row-format=compact
innodb-default-row-format=dynamic
다시 시작하기

저는 BK435에서 제시한 답변의 도움으로 다음과 같은 작업을 하고 문제를 해결했습니다.

set global innodb_file_format = BARRACUDA;
set global innodb_large_prefix = ON;
create table test (........) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

하려는 에 이 이 하려는 이 이 innodb_large_prefix. 다음에 대한 몇 가지 전제 조건 매개 변수도 설정해야 합니다.innodb_large_prefix일을 바르게 하기 위해서 입니다.

다음을 실행하여 innodb_large_prefix가 설정되어 있는지 확인할 수 있습니다.

show global variables like 'innodb_lar%';

innodb_large_prefix를 사용하기 위한 몇 가지 전제 조건은 다음과 같습니다.

nodb_file_format= 글로벌 변수를 설정해야 합니다.Barracuda

실행을 하려면: 하기 하기 :show global variables like 'innodb_fil%';

테이블 레벨에서는 ROW_FORMAT=Dynamic 또는 ROW_FORMAT=COMPRED를 사용해야 합니다.

Innodb의 경우 행은 기본적으로 COMPRATE 형식(ROW_FORMAT=CFORM)으로 저장됩니다.

MariaDB version 10.1.38을 사용하고 있었는데 아래의 주어진 명령어를 모두 사용했지만 작동이 되지 않았습니다 -

set global innodb_large_prefix = ON;
Query OK, 0 rows affected (0.00 sec)

set global innodb_file_per_table = ON;
Query OK, 0 rows affected (0.00 sec)

set global innodb_file_format = Barracuda;
Query OK, 0 rows affected (0.00 sec)

SET GLOBAL innodb_default_row_format = 'DYNAMIC';

MySQL(또는 MariaDB)을 다시 시작한 후에는 mysql 프롬프트에서 명령을 사용하여 이러한 설정이 반영되지 않기 때문입니다. 'innodb%'와 같은 변수를 표시합니다.

그런 다음 My.ini를 편집하여 아래 위치의 파일에 이 설정을 추가했습니다 - C:\xampp\mysql\bin\my.ini

## Innodb settings to bypass error of max size 737
innodb-file-format=barracuda
innodb-file-per-table=ON
innodb-large-prefix=ON
## Above 3 didnot work so i added below
innodb_default_row_format = 'DYNAMIC'

출처 : https://www.experts-exchange.com/questions/28675824/Why-am-I-unable-to-turn-innodb-large-prefix-ON-successfully-Every-time-I-reboot-mySql-on-my-Ubuntu-VPS-it-resets-to-OFF.html

Mariadb 10.1.31을 사용하는 경우 Mysql CLI에 로그인하는 동안 이 내용을 추가하면 됩니다.

SET GLOBAL innodb_file_format = Barracuda;

SET GLOBAL innodb_file_per_table = ON;

SET GLOBAL innodb_large_prefix = ON;

SET GLOBAL innodb_default_row_format = 'DYNAMIC';

당신은 변경해야 합니다.innodb-default-row-format동적에 대해 가변적입니다.

  • phpMyAdmin을 사용하는 경우 변수로 이동하여 다음을 검색합니다.row format.

  • WampServer를 사용하는 경우 다음으로 이동합니다.my.ini파일 형식:C:\wamp64\bin\mysql\mysql8.0.27\my.ini

자세한 내용은 MySQL Manual을 참조하십시오.

다음 옵션을 my.cnf에 추가하기만 하면 됩니다.

    [mysqld]
    innodb_file_format=Barracuda
    innodb_file_per_table=1
    innodb_large_prefix=1

그런 다음, mysql 서버를 재시작하면 문제가 해결됩니다.

파일의 mysql config로 이동 my.cnf

이 선을 바꿉니다

innodb-default-row-format=compact

로.

innodb-default-row-format=dynamic

효과가 있었습니다.

Wamp 버전 3.2.6부터
이 파일을 편집하기만 하면 됩니다.C:\wamp64\bin\mysql\mysql8.0.27\mysql.ini
다음에 대한 구성 변경innodb-default-row-format가치
부터innodb-default-row-format=compact
로.innodb-default-row-format=dynamic
mysql 다시 시작

나는 같은 오류를 가지고 있었습니다.innodb_large_prefix올바르게 구성되어 있습니다.

문제는 중고 대조 작업 중에 있었습니다.내 db는 기본 collation을 다음으로 설정했습니다.utf8mb4_bin(데이터베이스는 phpmyadmin "Operations" 탭에서 확인할 수 있습니다.)이는 utf8 대조(예: utf8_unicode_ci)는 챠당 3바이트를 사용한다는 것을 의미합니다.

이 경우 당신은 예를 들어 다음을 추가함으로써 다른 콜렉션을 사용할 수 있습니다.DEFAULT CHARSET=utf8종반에CREATE TABLE문장 또는 열 값의 일부만 사용하여 인덱스 크기를 제한합니다.KEY 'identifier' (column1(5),column2(10)).

관련 질문 참조: #1071 - 지정한 키가 너무 깁니다. 최대길이는 767바이트입니다.

제 경우(MySQL 버전 5.6) 문제는 제가 최대 256자(db는 utf8 collation을 사용함)를 사용할 수 있는 열이 있는 테이블을 생성하려고 했기 때문에 1utf8 문자당 3바이트 = 256*3= 768바이트를 사용할 수 있었습니다.해결책은 256자가 아니라 255자로 간단히 설정하는 것이었습니다.

다른 사람들이 제안하는 것처럼 nodb_large_prefix도 설정할 수 있었지만, 제 경우에는 기호 수가 적은 것이 더 쉬웠습니다.

@sassank-mukkamala가 말한 것처럼, 나는 단지 추가할 뿐입니다.ROW_FORMAT=DYNAMIC명령을 내리는 것이 옳았습니다.

create table `NameOfTheTable` (........) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;

Mysql 5.7을 사용하고 있습니다.

PHPMyAdmin(홈) 클릭 PHPmyAdmin(홈) 클릭 Variables On innodb default 행 for mart를 클릭하고 편집을 클릭한 다음 2를 입력한 다음 저장을 클릭합니다 변수 값을 동적으로 표시합니다 테이블 다시 가져오기

varchar(254)로 String primary key를 만들려고 해서 이 문제가 생겼습니다.때때로 간과하기 쉽습니다.그래서 인덱스 타입과 길이도 한번 확인해보세요 :)

누군가 MySQL 5.6으로 작업하는 경우 내가 찾은 유일한 해결책은 MySQL 5.7로 업데이트하고 설정하는 것뿐이었습니다.my.cnf이전 댓글(https://stackoverflow.com/a/57465002/2300390) 에서 언급한 바와 같이.

저는 같은 오류가 있었는데 다른 문제에 대해서요.데이터(데이터 및 스키마) 스크립트를 가져오는 중에 이 오류가 발생했습니다.유니크 인덱스를 삭제하면 문제가 해결되었습니다.

링크에서 가져온 답변

다음 시스템 변수를 설정합니다.

innodb_buffer_pool_size.................................... 702545920
innodb_file_format......................................... Barracuda
innodb_file_format_check................................... ON
innodb_file_format_max..................................... Barracuda
innodb_file_per_table...................................... ON
innodb_large_prefix........................................ ON
innodb_log_file_size....................................... 50331648

그리고 스키마를 작성할 때 반드시 Latin1로 작성해야 합니다.그것이 결국 저를 고쳤습니다.

언급URL : https://stackoverflow.com/questions/30761867/mysql-error-the-maximum-column-size-is-767-bytes

반응형