Artigos de Design.



CHAR ou VARCHAR? Que tipo de campo escolher no MySQL?

Ambos os tipos de campo “texto” podem ser definidos com um comprimento máximo no MySQL. A principal diferença entre os dois tipos de campos é que o CHAR sempre armazenará o texto com o tamanho fixo, mesmo que o “texto” seja menor do que o tamanho máximo especificado na criação do campo. Neste caso, o próprio SGBD do MySQL irá usar espaços a direita do “texto” preenchendo o campo até a quantidade máxima especificada em sua criação. Note, que esses espaços serão removidos quando você recuperar os dados a armazenados.

Por outro lado, “textos” armazenadas em uma coluna VARCHAR exigem apenas o tamanho do “texto” armazenado. Portanto, a palavra “ivo” em uma coluna VARCHAR(10) irá requerer quatro bytes de espaço (o comprimento do “texto” mais 1), enquanto em uma coluna CHAR(10), a mesma palavra exigirá 10 bytes de espaço.

Assim, de modo geral, as colunas VARCHAR tendem a consumir menos espaço em disco do que colunas CHAR. Contudo, as bases de dados são normalmente mais rápidas quando se trabalha com colunas de tamanho fixo, o que é um argumento a favor de CHAR. E essa mesma palavra de três letras, “ivo”, em um CHAR(3) utiliza apenas 3 bytes, enquanto em um VARCHAR(10) requer 4. Desta forma, como decidir qual usar?

Se o “texto” for sempre de um tamanho determinado (por exemplo, uma abreviatura do estado), use CHAR, caso contrário, use VARCHAR. Você pode notar, porém, que, em alguns casos, o MySQL define uma coluna de um tipo (como CHAR) embora você a tenha criado como outro tipo (VARCHAR). Isto é perfeitamente normal e é a maneira que o MySQL possui para melhorar o desempenho.

OBS: Note que a palavra texto encontra-se marcada aqui no sentido de ressaltar que o campo “string” pode, além de conter caracteres, conter também números, datas ou listas armazenadas como texto (string). Neste caso, não poderão ser usadas as funções SQL de cálculo específicas de outros tipos. A não ser que sejam convertidas antes.

Fonte: PHP 6 and MySQL 5 for Dynamic Web Sites. ULLMAN, Larry, 2007.

Função Veja Mais/Saiba Mais em PHP

Neste tutorial apresento uma simples função em PHP que retornará uma string com o tamanho especifico seguida do link “veja mais” que redirecionará para a URL. Função bem simples que é muito utilizadas em layouts que não permitem que o conteúdo se expanda muito sem perder a formatação.

A função recebe 4 parâmetros, a frase que deverá ser encurtada ($string); o tamanho de caracteres que deverá ter a string final ($corte), com um valor padrão; o link ($url) e o texto do link, também com um valor padrão: “Veja Mais”.

Note que a frase será cortada no espaço imediatamente anterior ao tamanho especificado.

[php]
// Retorna a string com o tamanho específico e o link veja mais

function vejaMais($string, $tamanho = 10, $url, $txt="Veja Mais"){

$tamanhoStr = strlen($string);

for ($index = 0; $index < $tamanhoStr; $index++) {

$caractere = $string[$index];

if ($caractere == " ") {

if ($index <= $tamanho) {
$corte = $index;
}
}
}

return substr($string, 0, $corte) . "… <a href=\"$url\">" . $txt . "</a>";
}
[/php]

Abaixo, como chamar o código na página. A recomendação é que seja usado o primeiro método evitando que o nome seja confundido com as funções reservadas do PHP. Neste caso, não faz muita diferença uma vez que não há funções em português em PHP.

[php]
// 1 exemplo de chamada

echo call_user_func_array(‘vejaMais’,array(‘Minha String a ser cortada’, 50, ‘http://www.google.com’));

// OU simplesmente

echo vejaMais(‘Minha String a ser cortada’, 50, ‘http://www.google.com’);

[/php]

Essa instrução retornará a seguinte frase: Minha String a ser… Veja Mais

Tipos de Campos no MySQL, saiba como escolher o tipo correto

Este post tem o objetivo de ajudar o desenvolvedor na escolha adequada do tipo de campo que deverá utilizar no banco MySQL para persistir seus dados.

O desenvolvedor inexperiente costuma confundir bastante os tipos de campo da linguagem utilizada (PHP por exemplo) com os tipos que o banco pode armazenar. Um exemplo clássico dessa confusão é o booleano que é automaticamente convertido de true para 1 e false para 0 (zero).  Além disso, há o clássico erro de armazenamento de CPF em campo numérico o que faz com que todos os zeros a esquerda se percam.

Portanto coloco abaixo a tabela com os campos do MySQL para que sirva de um guia de implementação do banco de dados de sua aplicação.

Lembro ainda que antes de mais nada você deve identificar qual o tipo de variável que irá armazenar: número, texto, binário, data,  lista ou combinação destes. Em seguida estimar o tamanho do campo e se será variável ou fixo. O MySQL costuma preencher campos texto não variáveis com espaços em branco. Em seguida, verificar se permitirá nulo ou não, se é uma chave candidata, primária, estrangeira, índice ou único.

Não há uma regra fixa para saber como os bancos deverão ser implementados, mas tenha sempre em mente que neste caso, mais é melhor. Ou seja, é melhor sobrar espaço do que ter uma informação inserida com pedaços faltando. Já viu alguém nascer no “Rio de Jane” pois o desenvolvedor não colocou o campo com o tamanho correto?!

Observações:

  • O tamanho do campo para tipos numéricos não afeta o intervalo de valores que pode ser armazenado na coluna. Colunas definidas como TINYINT (1) ou TINYINT (20) podem armazenar exatamente, os mesmos valores. Em vez disso, para inteiros, o tamanho determina a largura do campo, para casas decimais, o tamanho é o número total de dígitos que pode ser armazenado.
  • Muitos dos tipos de dados têm nomes sinônimos: INT e INTEGER, DEC e DECIMAL, etc
  • O tipo de campo TIMESTAMP é automaticamente definido com a data e hora quando um INSERT ou UPDATE ocorre, mesmo se nenhum valor for especificado para esse campo . Se uma tabela possui múltiplas colunas TIMESTAMP, somente a primeira será atualizada quando um INSERT ou UPDATE é realizado.
  • MySQL também tem diversas variantes para os tipos de texto que permitem o armazenamento de dados binários. Estes tipos são BINARY, VARBINARY, TINYBLOB, MEDIUMBLOB, e LONGBLOB. Esses tipos são usados para armazenamento de arquivos ou dados criptografados.
Tipos Numéricos
Tipo Uso Tamanho
Atributo MIN MAX
TINYINT Um inteiro muito pequeno Signed: -128 127
Unsigned 0 255
SMALLINT Um inteiro pequeno Signed: –32768 32767
Unsigned 0 65535
MEDIUMINT Um inteiro de tamanho mediano Signed: –8388608 8388607
Unsigned 0 16777215
INT or INTEGER Um inteiro de tamanho normal Signed: –2147483648 2147483647
Unsigned 0 4294967295
BIGINT Um inteiro de temanho grande Signed: –9223372036854775808 9223372036854775807
Unsigned 0 18446744073709551615
FLOAT Um pequeno número de ponto flutuante (precisão simples) Signed –3.402823466E+38 –1.175494351E-38, 0
1.175494351E-38 3.402823466E+38
Não pode ser unsigned
OBS Se o número de decimais não for especificado ou for <= 24 será de precisão simples
DOUBLE,
DOUBLE PRECISION,
REAL
Um número de ponto flutuante de tamanho normal (precisão dupla) Signed -1.7976931348623157E+308 -2.2250738585072014E-308, 0
2.2250738585072014E-308 1.7976931348623157E+308
Não pode ser unsigned
OBS Se o número de decimais não for especificado ou for 25 <= Decimals <= 53 será de precisão dupla
DECIMAL,
NUMERIC
Um número de ponto flutuante descompactado . Signed Se comporta como um campo CHAR: “descompactado” significa que o número é armazenado como uma string, usando um caractere para cada dígito do valor. O ponto decimal e, para números negativos, o sinal ‘-‘ não é contado. Se o decimal for 0, os valores não terão ponto decimal ou parte fracionária. O alcance máximo de valores decimais é o mesmo que para o DOUBLE, mas a faixa atual para um campo DECIMAL dado pode ser limitado pela escolha de comprimento e decimais.
Não pode ser unsigned
OBS Se Decimais é deixado de fora ele é definido como 0. Se o comprimento é deixado de fora ele é definido como 10. Note que no MySQL 3,22 o comprimento inclui o sinal eo ponto decimal
Campos de Datas
Formato MIN MAX
DATE Data ‘1000-01-01’ ‘9999-12-31’
OBS Formato: ‘YYYY-MM-DD’
DATETIME Data e horário ‘1000-01-01 00:00:00’ ‘9999-12-31 23:59:59’
OBS Formato: ‘YYYY-MM-DD HH:MM:SS’
TIMESTAMP Timestamp ‘1970-01-01 00:00:00’ aproximadamente 2037
OBS Formato: YYYYMMDDHHMMSS, YYMMDDHHMMSS, YYYYMMDD ou YYMMDD, dependendo se M é 14 (ausente), 12, 8 ou 6, podendo ser strings ou números.

Este tipo é recomendável para instruções de INSERT ou UPDATE pois é automaticamente marcado com os valores da operação mais recente quando não informado.

TIME A time ‘-838:59:59’ ‘838:59:59’
OBS formato: ‘HH:MM:SS’, podem ser strings ou números
YEAR Anos com 2 ou 4 digitos. O padrão é 4 digitos 4 digitos 1901 2155 e 0000
2 digitos 1970 2069
OBS Formato: YYYY
podem ser strings ou números.
Campos Texto
MIN MAX
CHAR String de tamanho fixo. Sempre é completada com espaços a direita até o tamanho definido 1 255 caracteres
OBS Espaços excessivos são removidos quando o valor é trazido.Os valores são ordenados e comparados ignorando caixas altas e baixas de acordo com a codificação padrão, a menos que seja fornecido uma chave binária.
VARCHAR String de tamanho variável 1 255 caracteres
OBS Os valores são ordenados e comparados ignorando caixas altas e baixas de acordo com a codificação padrão, a menos que seja fornecido uma chave binária.Nota: Espaços execessivos são removidos quando o valor é inserido.
TINYTEXT 0 255 (2^8 – 1) caracteres
TEXT 0 65535 (2^16 – 1) caracteres
MEDIUMTEXT 0 16777215 (2^24 – 1) caracteres
LONGTEXT 0 4294967295 (2^32 – 1) caracteres
Dados Binários
TINYBLOB 0 255 (2^8 – 1) caracteres
BLOB 0 65535 (2^16 – 1) caracteres
MEDIUMBLOB 0 16777215 (2^24 – 1) caracteres
LONGBLOB 0 4294967295 (2^32 – 1) caracteres
Listas
MIN MAX
ENUM Enumeração String que pode conter apenas um valor ou zero 65535 valores distintos.
SET Lista String que pode conter zero ou mais valores 64 itens
fonte: http://help.scibit.com/Mascon/masconMySQL_Field_Types.html e http://dev.mysql.com/doc/refman/5.0/en/data-type-overview.html(tradução livre)

Nota:

Eliminando “index.php” do CodeIgniter no Xampp 2.5

O objetivo deste tutorial é tentar ajudar o pessoal que está com dificuldades em configurar o CodeIgniter removendo a string “index.php” da URL.
No intuito de tornar as URLs dos meus projetos mais amigáveis li e reli vários tutoriais sem encontrar algum que realmente resolvesse o meu problema até que um amigo, André Neves, me emprestasse o livro do CodeIgniter do Ademir Cristiano Gabardo que foi bastante esclarecedor.

Estarei trabalhado com a versão 2.0.2 do CodeIgniter (CI) e com a versão 2.5 do Xampp.

Se você acabou de instalar o CI você deve remover o “default_controller” que é a classe padrão de carregamento de seu site para que o framework não carregue nenhuma classe padrão. Isto deve ser feito no arquivo: application\config\routes.php. Ache a linha do “default_controler” e apague a palavra “welcome”, como no exemplo abaixo.

// Antes
$route['default_controller'] = "welcome";
//Depois
$route['default_controller'] = "";

Agora ao recarregar a sua página pelo navegador, o CI encontrará um erro pois não achou o controller padrão e apresentará a pagina de erro padrão. Para voltar a acessar a classe welcome, você devera digitar agora na url o sufixo: “/index.php/welcome” (no meu exemplo a URL completa seria: “http://localhost/CodeIgniter_2.0.2/index.php/welcome”).

O próximo passo é copiar o arquivo “.htaccess” (baixe o ZIP) para a pasta raiz de seu projeto (veja a imagem mais abaixo). Ou ainda, abra o Notepad, copie e cole as linhas abaixo e salve como “.htaccess” (sem aspas) na raiz de seu projeto. É importante que não coloque espaços extras e nem quebras de linhas. Além disso, atente para salvar o arquivo com o nome “.htaccess” (sem aspas). Não esqueça do ponto antes do nome e cuidado para não salvar com uma extensão qualquer.

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

Clique para ampliar

Essas linhas são instruções que informam ao apache que caso o método de reescrita esteja desabilitado, que o habilite (linha 1). Informa também, as regras de aplicação de reescrita nas linhas 2 e 3 e finalmente na quarta linha, o que ele deve procurar para reescrever.

Volte ao navegador e recarregue a página agora retirando a string “index.php” (Ex: “http://localhost/CodeIgniter_2.0.2/welcome”)  , isso deve ser o suficiente para que ela não apareça mais. De qualquer forma é de boa prática configurar o framework para que não espere receber esta string na URL. Vá então em application/config/config.php e remova a configuração padrão de “index_page” como abaixo.

// Antes
$config['index_page'] = 'index.php';
// Depois
$config['index_page'] = '';

Fonte: Gabardo, Ademir Cristiano. CodeIgniter Framework PHP, Novatec – SP – 2010.

ALT + Caractere

Caracteres especiais, também conhecidos como Alt Codes, ou ainda Alt Characters, é uma forma diferente de digitar sinais e letras do alfabeto com o auxílio do teclado. Tudo é feito através de códigos, utilizando a tecla ALT e o teclado numérico.

A tabela abaixo foi criada por mim mesmo digitando os códigos uma a um. Mas lembre-se que só são possíveis sendo digitados no teclado numérico (somente de números — lado direito do teclado) e com a tecla NUM LOCK marcada. Além disso a tecla ALT deve estar pressionada durante a digitação dos números e ao terminar a sequência de números o caractere aparecerá automaticamente ao soltar a tecla ALT.

ALT + 1 ☺ ALT + 52 4 ALT + 103 g ALT + 154 Ü ALT + 205 ═
ALT + 2 ☻ ALT + 53 5 ALT + 104 h ALT + 155 ø ALT + 206 ╬
ALT + 3 ♥ ALT + 54 6 ALT + 105 i ALT + 156 £ ALT + 207 ¤
ALT + 4 ♦ ALT + 55 7 ALT + 106 j ALT + 157 Ø ALT + 208 ð
ALT + 5 ♣ ALT + 56 8 ALT + 107 k ALT + 158 × ALT + 209 Ð
ALT + 6 ♠ ALT + 57 9 ALT + 108 l ALT + 159 ƒ ALT + 210 Ê
ALT + 7 • ALT + 58 : ALT + 109 m ALT + 160 á ALT + 211 Ë
ALT + 8 ◘ [backspace] ALT + 59 ; ALT + 110 n ALT + 161 í ALT + 212 È
ALT + 9 ○ [tab] ALT + 60 < ALT + 111 o ALT + 162 ó ALT + 213 ı
ALT + 10 ◙ [line break] ALT + 61 = ALT + 112 p ALT + 163 ú ALT + 214  Í
ALT + 11 ♂ ALT + 62 > ALT + 113 q ALT + 164 ñ ALT + 215 Î
ALT + 12 ♀ ALT + 63 ? ALT + 114 r ALT + 165 Ñ ALT + 216 Ï
ALT + 13 ♪ ALT + 64 @ ALT + 115 s ALT + 166 ª ALT + 217 ┘
ALT + 14 ♫ ALT + 65 A ALT + 116 t ALT + 167 º ALT + 218 ┌
ALT + 15 ☼ ALT + 66 B ALT + 117 u ALT + 168 ¿ ALT + 219 █
ALT + 16 ► ALT + 67 C ALT + 118 v ALT + 169 ® ALT + 220 ▄
ALT + 17 ◄ ALT + 68 D ALT + 119 w ALT + 170 ¬ ALT + 221 ¦
ALT + 18 ↕ ALT + 69 E ALT + 120 x ALT + 171 ½ ALT + 222 Ì
ALT + 19 ‼ ALT + 70 F ALT + 121 y ALT + 172 ¼ ALT + 223 ▀
ALT + 20 ¶ ALT + 71 G ALT + 122 z ALT + 173 ¡ ALT + 224 Ó
ALT + 21 § ALT + 72 H ALT + 123 { ALT + 174 « ALT + 225 ß
ALT + 22 ▬ [paste] ALT + 73 I ALT + 124 | ALT + 175 » ALT + 226 Ô
ALT + 23 ↨ ALT + 74 J ALT + 125 } ALT + 176 ░ ALT + 227 Ò
ALT + 24 ↑ ALT + 75 K ALT + 126 ~ ALT + 177 ▒ ALT + 228 õ
ALT + 25 ↓ ALT + 76 L ALT + 127 ⌂ ALT + 178 ▓ ALT + 229 Õ
ALT + 26 → ALT + 77 M ALT + 128 Ç ALT + 179 │ ALT + 230 µ
ALT + 27 ← ALT + 78 N ALT + 129 ü ALT + 180 ┤ ALT + 231 þ
ALT + 28 ∟ ALT + 79 O ALT + 130 é ALT + 181 Á ALT + 232 Þ
ALT + 29 ↔ ALT + 80 P ALT + 131 â ALT + 182 Â ALT + 233 Ú
ALT + 30 ▲ ALT + 81 Q ALT + 132 ä ALT + 183 À ALT + 234 Û
ALT + 31 ▼ ALT + 82 R ALT + 133 à ALT + 184 © ALT + 235 Ù
ALT + 32 [space] ALT + 83 S ALT + 134 å ALT + 185 ╣ ALT + 236 ý
ALT + 33 ! ALT + 84 T ALT + 135 ç ALT + 186 ║ ALT + 237 Ý
ALT + 34 “ ALT + 85 U ALT + 136 ê ALT + 187 ╗ ALT + 238 ¯
ALT + 35 # ALT + 86 V ALT + 137 ë ALT + 188 ╝ ALT + 239 ´
ALT + 36 $ ALT + 87 W ALT + 138 è ALT + 189 ¢ ALT + 240 ­­ð
ALT + 37 % ALT + 88 X ALT + 139 ï ALT + 190 ¥ ALT + 241 ±
ALT + 38 & ALT + 89 Y ALT + 140 î ALT + 191 ┐ ALT + 242 ‗
ALT + 39 ‘ ALT + 90 Z ALT + 141 ì ALT + 192 └ ALT + 243 ¾
ALT + 40 ( ALT + 91 [ ALT + 142 Ä ALT + 193 ┴ ALT + 244 ¶
ALT + 41 ) ALT + 92 \ ALT + 143 Å ALT + 194 ┬ ALT + 245 §
ALT + 42 * ALT + 93 ] ALT + 144 É ALT + 195 ├ ALT + 246 ÷
ALT + 43 + ALT + 94 ^ ALT + 145 æ ALT + 196 ─ ALT + 247 ¸
ALT + 44 , ALT + 95 _ ALT + 146 Æ ALT + 197 ┼ ALT + 248 °
ALT + 45 – ALT + 96 ` ALT + 147 ô ALT + 198 ã ALT + 249 ¨
ALT + 46 . ALT + 97 a ALT + 148 ö ALT + 199 Ã ALT + 250 ·
ALT + 47 / ALT + 98 b ALT + 149 ò ALT + 200 ╚ ALT + 251 ¹
ALT + 48 0 ALT + 99 c ALT + 150 û ALT + 201 ╔ ALT + 252 ³
ALT + 49 1 ALT + 100 d ALT + 151 ù ALT + 202 ╩ ALT + 253 ²
ALT + 50 2 ALT + 101 e ALT + 152 ÿ ALT + 203 ╦ ALT + 254 ■
ALT + 51 3 ALT + 102 e ALT + 153 ALT + 204 ╠ ALT + 255
Assine o RSS de meus Artigos e Comentários.