MAX_ALLOWED_PACKET NO MYSQL

ALVAROVB2009 20/09/2024 10:59:38
#503579
Bom dia a todos, tenho um banco de dados onde tenho que guardar várias imagens, no início do sistema tinha um limite de tamanho na imagem e também eu fazia uma compactação da imagem pelo sistema e a pedido do cliente acabei liberando esse limite e tirando a compactação automática, até tudo bem , tudo rodando 100%

Com o tempo verifiquei que em determinados momentos dava um problema de gravação no momento que iria gravar a imagem no banco e vi que o campo max_allowed_packet era o responsável pelo controle de informação que chegava no banco e que tem o valor padrão de 1048576.
Coloquei o valor máximo permitido por esse campo que é 1048576000 , a partir da não tive problema com a gravação das imagens.

Más verifiquei a pouco tempo que o banco estava inchando rapidamente e falei com o cliente e falei que iria limitar, ele a contra gosto aceitou, agora o sistema tem um limite e funciona bem.

O problema é que o campo max_allowed_packet em um determinado tempo volta para o valor padrão, não sei o motivo e em que momento isso ocorre, e quando um produto antigo é editado com a imagem de tamanho grande, o problema de gravação ocorre e ai tenho que alterar o campo e subir essa quantidade.
O cliente não tem mais a imagem original e a compactação que eu fazia antes ( no início do sistema ) , não deixava a imagem bem definida para ele.

Queria saber como que posso deixar o max_allowed_packet fixo para que não volte ao valor padrão

Andei procurando isso na net e não achei nada referente a isso

Desde já agradeço a todos pela ajuda
NILSONTRES 20/09/2024 11:21:18
#503581
Não é isso que vc perguntou, mas já tentou gravar em base64 ?. Talvez ocuparia menos espaço, teria que testar.
Eu resolvi essa questão com Clientes que necessitam de muitas imagens gravando elas em Baldes na Nuvem, eu utilizo google Plataforma.
ALVAROVB2009 20/09/2024 11:35:31
#503582
Nilson obrigado pelo retorno

Meu sistema esta em vb6 e o banco de dados não esta na nuvem esta no servidor Windows Server
No meu banco de dados o campo esta tipado como LongBlob , como seria essa gravação de base64, teria algum exemplo que possa rodar em vb6 ?

Porque se ocupa menos espaço, seria uma solução bem prática e eu não tinha ouvido falar desse tipo de gravação
NILSONTRES 20/09/2024 14:55:59
#503584
Em VB6 não sei, mas peguei isso aqui no chatgpt.
Código para Decodificar e Salvar uma Imagem Base64 em VB6:
vb
Copiar código
Private Function Base64ToByteArray(ByVal base64String As String) As Byte()
' Variáveis
Dim xmlDoc As Object
Dim node As Object
Dim decodedBytes() As Byte

' Cria um documento XML
Set xmlDoc = CreateObject("MSXML2.DOMDocument")

' Cria um nó XML para manipular a string Base64
Set node = xmlDoc.createElement("Base64Data")
node.dataType = "bin.base64"
node.Text = base64String

' Converte a string Base64 para um array de bytes
decodedBytes = node.nodeTypedValue

' Retorna o array de bytes
Base64ToByteArray = decodedBytes
End Function

Private Sub SaveByteArrayToFile(ByVal byteArray() As Byte, ByVal filePath As String)
Dim fileNum As Integer

' Abre um arquivo binário para escrita
fileNum = FreeFile
Open filePath For Binary As fileNum
Put fileNum, , byteArray
Close fileNum
End Sub

Private Sub DecodeAndSaveImage(ByVal base64String As String, ByVal outputFilePath As String)
Dim imageData() As Byte

' Decodifica a string Base64 em bytes
imageData = Base64ToByteArray(base64String)

' Salva os bytes como um arquivo de imagem
SaveByteArrayToFile imageData, outputFilePath

' Informa ao usuário que a imagem foi salva
MsgBox "Imagem salva em: " & outputFilePath
End Sub

' Exemplo de uso
Private Sub TesteBase64Imagem()
Dim base64Image As String
Dim filePath As String

' String Base64 de exemplo (imagem codificada em Base64)
base64Image = "SEU_CODIGO_BASE64_AQUI" ' Coloque aqui a string Base64 da imagem

' Caminho onde a imagem será salva
filePath = "C:\caminho\para\imagem.jpg"

' Decodifica a imagem Base64 e salva no disco
DecodeAndSaveImage(base64Image, filePath)
End Sub
Explicação do Código:
Base64ToByteArray:

Essa função é similar ao exemplo anterior, mas agora retorna um array de bytes em vez de uma string. Ela usa o MSXML para decodificar a string Base64 para bytes.
SaveByteArrayToFile:

Essa função grava os bytes decodificados em um arquivo no disco. Ela usa o método Open ... For Binary para salvar o arquivo no formato binário, que é adequado para imagens.
DecodeAndSaveImage:

Combina as duas funções: primeiro, decodifica a string Base64 em bytes e, em seguida, salva esses bytes como um arquivo de imagem no local especificado (outputFilePath).
Teste:

No exemplo TesteBase64Imagem, você deve fornecer uma string Base64 válida representando uma imagem e o caminho onde o arquivo será salvo, como "C:\caminho\para\imagem.jpg".
Observação:
A string Base64 fornecida deve ser uma imagem válida codificada nesse formato. Você pode obter strings Base64 de imagens usando ferramentas online ou bibliotecas específicas para codificar imagens.
O formato do arquivo (JPG, PNG, etc.) deve corresponder ao conteúdo da string Base64. Por exemplo, se a string Base64 representa uma imagem PNG, o arquivo deve ser salvo com a extensão .png.
Exemplo Prático:
Se você tiver uma imagem em Base64 e quiser salvá-la como "imagem.jpg", o código decodificará a string e criará o arquivo de imagem no local especificado.
ALVAROVB2009 20/09/2024 17:58:18
#503589
Agradeço o retorno, darei uma estudada e implantar no meu projeto, quem sabe acabo com o problema do meu campo e também dar uma limitada no tamanho das imagens sem fazer que elas percam a qualidade
NILSONTRES 20/09/2024 21:13:17
#503590
Em VB6 não é decodificada como no .net tem essa orientação.

Para converter uma string codificada em Base64 para seu formato original no VB6 (Visual Basic 6.0), você pode usar a biblioteca MSXML (Microsoft XML). O MSXML contém métodos para codificar e decodificar dados em Base64.

Aqui está um exemplo de como você pode transformar (decodificar) uma string Base64 em VB6:

Exemplo de Código para Decodificar Base64 no VB6
Referencie a biblioteca MSXML:

Vá até o menu Projeto (Project) -> Referências (References).
Procure e marque a opção Microsoft XML, v6.0 (ou v3.0). O caminho exato pode variar dependendo da versão do MSXML instalada.
Faça seu login para responder