News:

SMF 2.1.4 has been released! Take it for a spin! Read more.

Main Menu

Aumentar número de caracteres em mensagem

Started by FragaCampos, May 18, 2016, 11:39:54 AM

Previous topic - Next topic

FragaCampos

Saudações.

Penso que isto já foi por aqui abordado algures, mas pesquisei e não encontrei nada relacionado.

Não sei se cada mensagem num tópico tem um limite de linhas ou caracteres, mas eu gostaria de saber como aumento este(s) valor(es) de modo a poder criar mensagens maiores.

Tenho um tópico no fórum que é uma lista, e chegou a um ponto em que quando gravo a mensagem o texto fica truncado, por excesso de linhas ou caracteres.

Há forma de alterar isto?

margarett

Sim, há. Não uses "0" na configuração de caracteres máximos por mensagem, coloca um valor manifestamente grande (ex: 100.000 e não te aconselhava a colocar mais que isso, podes começar a "bater" noutros limites que já não são do SMF; obviamente que podes, assim o teu servidor esteja configurado correctamente ;) )

Porquê: o campo "body" da tabela smf_messages é do tipo "TEXT" que, pela especificação do tipo de campo, suporta 65.536 bytes.
- Se colocares "0" no limite máximo de caracteres, o SMF não vai fazer nada o texto submetido e é o próprio MySQL que trunca o texto em excesso.
- Se colocares um valor no limite, o SMF vai limitar-te activamente o tamanho dos posts submetidos. Mas vai fazer ainda outra coisa engraçada: se esse valor for superior a 65536, o SMF vai automagicamente mudar-te o tipo de campo na tabela para MEDIUMTEXT, que já suporta 16.777.21 bytes :o (podes criar um post até 16Mb :P )

Nota que o número de bytes pode não ser (e normalmente não é) o número de caracteres. Em UTF8, os nossos caracteres "especiais" ocupam 2 bytes ;)
Se forem conduzir, não bebam. Se forem beber... CHAMEM-ME!!!! :D

QuoteOver 90% of all computer problems can be traced back to the interface between the keyboard and the chair

FragaCampos

Olá, margarett.

Ao menos aqui, não só se obtêm respostas, como ainda aprendemos sempre um pouco mais.  ;)

Experimentei alterar esse campo para 100 000, mas ao gravar, o número foi automaticamente alterado para 65535. É suposto ser assim?

margarett

Não,  não é suposto. Tenho de investigar mas tenho quase a certeza que funciona...
Se forem conduzir, não bebam. Se forem beber... CHAMEM-ME!!!! :D

QuoteOver 90% of all computer problems can be traced back to the interface between the keyboard and the chair

FragaCampos

Ok.
Para o efeito, também resultaria a introdução de uma nova mensagem logo a seguir à primeira, mas não sei como fazer isso... :/

FragaCampos


margarett

Ups :P
Deixa lá experimentar então ;)

edit: experimentei e funcionou sem problemas...
Se forem conduzir, não bebam. Se forem beber... CHAMEM-ME!!!! :D

QuoteOver 90% of all computer problems can be traced back to the interface between the keyboard and the chair

margarett

OK, tentei várias de várias formas e deu sempre. Posso assumir que, eventualmente, o teu utilizador MySQL não tem permissões para alterar a BD e por isso falhe? Não sei ao certo.

Faz o seguinte:
- procura a tabela smf_settings e vê se tens uma varíavel chamada "max_messageLength". Se tiveres, apaga-a ou define-a como 0 (e já agora diz-nos que valor é que ela tem)
- na tabela smf_messages, confirma que o tipo do campo "body" é "text" e a collation é "utf8_general_ci" Sendo, corre o seguinte na aba "SQL":
ALTER TABLE smf_messages CHANGE body body MEDIUMTEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;

Claro que já tens um backup feito nesta altura :P

edit: não percebi o que quiseste dizer aqui
Quote from: FragaCampos on May 27, 2016, 05:51:31 PM
Para o efeito, também resultaria a introdução de uma nova mensagem logo a seguir à primeira, mas não sei como fazer isso... :/
Se forem conduzir, não bebam. Se forem beber... CHAMEM-ME!!!! :D

QuoteOver 90% of all computer problems can be traced back to the interface between the keyboard and the chair

FragaCampos

Obrigado.
Vou experimentar e depois digo-te como correu.

O que quis dizer com a frase em baixo foi que também poderia criar uma nova mensagem a seguir à primeira de um tópico (quando a primeira excede o limite de caracteres). O problema é que já existem respostas e não sei como poderia introduzir uma nova mensagem no meio de duas já existentes.

Quote from: margarett on June 12, 2016, 12:15:29 PM
edit: não percebi o que quiseste dizer aqui
Quote from: FragaCampos on May 27, 2016, 05:51:31 PM
Para o efeito, também resultaria a introdução de uma nova mensagem logo a seguir à primeira, mas não sei como fazer isso... :/

margarett

Não podes :P
(pelo menos sem muito muito muito trabalho - e falível)
Se forem conduzir, não bebam. Se forem beber... CHAMEM-ME!!!! :D

QuoteOver 90% of all computer problems can be traced back to the interface between the keyboard and the chair

FragaCampos


FragaCampos


margarett

Latin? Tu não usas pt_pt-utf8?

Esta coisa das collations parte-me todo... :P
Se forem conduzir, não bebam. Se forem beber... CHAMEM-ME!!!! :D

QuoteOver 90% of all computer problems can be traced back to the interface between the keyboard and the chair

FragaCampos

O idioma do fórum está em pt_pt-utf8, mas não me perguntes porque é que a base de dados está assim...

FragaCampos

Se eu alterar o valor para 0 no fórum, o campo max_messageLength fica também a 0, se mudar para 100000, tanto no fórum como na base de dados o valor fica limitado a 65535. Isto sugere que há, algures, uma limitação interna, provavelmente na versão PHP do servidor.

margarett

Muda no fórum para 100000 e depois edita a estrutura da tabela, muda o campo "body" para MEDIUMTEXT.

Não sei porque é que isso acontece no teu...
Se forem conduzir, não bebam. Se forem beber... CHAMEM-ME!!!! :D

QuoteOver 90% of all computer problems can be traced back to the interface between the keyboard and the chair

FragaCampos

Missão cumprida. :)

Alterei o campo "body" para MEDIUMTEXT na estrutura da tabela smf_messages e o SMF aceitou 200 mil caracteres. Como não vi erros em lado nenhum, parece estar tudo bem.

Mas se dizes que "se esse valor for superior a 65536, o SMF vai automagicamente mudar-te o tipo de campo na tabela para MEDIUMTEXT", porque é que isso não acontece neste caso? Era interessante saber o motivo...

Seja como for, obrigado uma vez mais pela tua preciosa ajuda. ;)

Advertisement: