programing

Grails, MySQL(MariaDB) - 더 적은 데이터에도 불구하고 max_allowed_packet 초과

lastmoon 2023. 7. 26. 22:22
반응형

Grails, MySQL(MariaDB) - 더 적은 데이터에도 불구하고 max_allowed_packet 초과

저는 현재 gralls 프로젝트를 개발 중이며, 따라서 XAMPP 5.6.14를 현지에서 사용하고 있습니다.이제 다음과 같은 문제가 발생했습니다.

Packet for query is too large (10485896 > 10485760). You can change this value on the server by setting the max_allowed_packet' variable.

오류가 발생하기 전에 다음과 같이 my.cnf의 구성을 변경했습니다.

[mysqld]
max_allowed_packet = 10M
innodb_buffer_pool_size = 400M
innodb_log_file_size = 100M

데이터베이스에 저장할 도메인 클래스는 다음과 같습니다.

class DocumentFile {

    Date dateCreated
    Timestamp timestamp
    Integer someValue
    String someOtherValue
    Blob file

    static constraints = {
        someValue nullable: true
        someOtherValue nullable: true
    }

    static mapping = {
        file type: 'blob'
    }
}

테스트를 위해 데이터베이스에 새 파일을 삽입하기 위해 다음 행을 사용했습니다.

def file = new javax.sql.rowset.serial.SerialBlob(file.getBytes())
sql.execute("insert into tblDocumentFile (dateCreated, timestamp, file, someOtherValue, someValue) values (NOW(), NOW(), ?, ?, ?)", [file, 'someValue', 1])

지금까지는 좋습니다.문제는 파일 크기가 정확히 5242880바이트일 때 위의 오류 메시지가 표시된다는 것입니다.그리고 거기가 제가 갇혀있는 곳입니다.

파일이 정확히 절반인데 오류 메시지가 표시되는 이유는 무엇입니까?max_allowed_packet쿼리용 패킷의 크기가 분명히 두 배가 되는 이유는 무엇입니까?

아이디어 있어요?

데이터베이스에서 보고된 패킷 크기가 개체에 있는 것과 같은 데이터 크기와 다릅니다.이중 바이트 문자 인코딩(크기가 100% 다를 수 있음)과 일부 오버헤드(문자 인코딩을 고려한 후 크기에 최대 10%)로 인해 상당한 차이가 있을 수 있습니다.

언급URL : https://stackoverflow.com/questions/35017588/grails-mysql-mariadb-max-allowed-packet-exceeded-despite-less-data

반응형