Em Magic xpa (uniPaaS), o tipo de dado “string” é definido pelo tipo interno Alpha ou UniCode. São similares, com a diferença que Alpha define que cada caracter da string ocupará 1 byte (AnsiString) e UniCode, 2 bytes (WideString).
Para qualquer dos dois tipos, o limite é de 32.000 caracteres.
Em algumas situações, contudo, pode ser necessário armazenar textos (strings) maiores que este limite.
Nestes casos, pode-se utilizar os tipos internos BLOB Content:ANSI (Alpha) ou BLOB Content:Unicode (Unicode).
Os campos BLOBs não possuem restrição de tamanho (a memória para seu conteúdo é alocada dinamicamente conforme a necessidade). Virtualmente, podem chegar até 2GB (2.147.483.647 caracteres). E com estas configurações do atributo “content”, são 100% compatíveis em atribuição e concatenação com os tipos básicos (Alpha e UniCode) e funções cujos parâmetros ou retornos também são Alpha ou UniCode.
Considere as seguintes variáveis Magic xpa:
A (Alpha 32000)
B (UniCode 32000)
C BLOB/Ansi
D BLOB/UniCode
Se atribuir o resultado da expressão FILL(‘x’, 32000) & FILL(‘y’, 32000) a cada uma delas, as variáveis A e B conterão apenas a sequencia de letras ‘x’. Já as variáveis C e D, conterão toda a sequencia de ‘x’ seguidos de ‘y’.
A função LEN(?) retornará 32.000 para A e B, mas 64.000 para C e D.
As seguintes características diferem um pouco mais os tipos Alpha/UniCode dos BLOB.ANSI/BLOB.UniCode:
- Inicialização = Alpha/UniCode são inicializados (por default) com espaços em branco até o total de sua capacidade. BLOB.ANSI/BLOB.UniCode, com NULL.
- Tamanho do Conteúdo = Se colocar menos texto do que o máximo definido na variável Alpha/UniCode, ele será preenchido com espaços até o limite do campo. A função LEN() sempre retorna o tamanho total dos campos. Com BLOB.ANSI/BLOB.UniCode não há complemento de espaços à direita, e a função LEN() retorna o quantidade atual de caracteres existentes.