Varias comportamentos visíveis foram alteradas entre o MySQL 4.0 e o MySQL 4.1 para corrigir erros críticos e tornar o MySQL mais compatível com o padrão ANSI SQL. Estas alterações podem afetar à sua aplicação.
Alguns dos comportamentos do MySQL 4.1 no 4.0 podem ser testados
antes de realizar uma atualização completa para a versão 4.1,
adicionamos às últimas distribuições do MySQL 4.0 (a paritr
da 4.0.12) a opção de inicialização --new
para o mysqld
.
Esta opção lhe dá o comportamento da versão 4.1 para as
alterações mais críticas. Você também pode habilitar estes
comportamentos para a conexão de uma determinado cliente com o
comando SET @@new=1
, ou desabilitá-lo se ele
for iniciado com SET @@new=0
.
Se você acredita que algumas das alterações da versão 4.1 o
afetarão, recomendamos que antes de atualizar para a versão
4.1, você faça o download da última distribuição do MySQL
4.0 e o execute com a opção --new
adicionando
o seguinte ao seu arquivo de configuração:
[mysqld-4.0] new
Deste modo você pode testar o novo comportamento com seus
aplicativos na versão 4.0 para certificar-se que eles
funcionam. Isto o ajudará a ter uma transição suave quando
realizar uma atualização completa do MySQL 4.1. Fazendo isto
do modo acima irá assegurar que você não execute
acidentalemte a versão 4.1 com a opção --new
mais tarde.
A seguinte lista descreve alterações que podem afetar aplicações e que você deve observar ao atualizar para a versão 4.1:
TIMESTAMP
agora é retornado como uma
string com o formato 'YYYY-MM-DD
HH:MM:SS'
. (A opção --new
pode
ser usada a partir da versão 4.0.12 para fazer um servidor
4.0 se comportar como 4.1 a este respeito.) Se você quiser
tê-lo com um número (como a Versão 4.0 faz) deve-se
adicionar +0 a coluna TIMESTAMP
a eles:
mysql> SELECT ts_col + 0 FROM tbl_name;
Tamanhos de display para TIMESTAMP
não
são mais suportados. Por exemplo, se você declarar um
coluna como TIMESTAMP(10)
, o
(10)
é ignorado.
Esta mudança era necessária para compatibilidade com os padrões SQL. Em uma versão futura. Em uma versão futura, uma alteração adicional será feita (compatível com versões anteriores com esta mudaça), permitindo que o tamanho do timestamp indique o número desejado de dígitos de frações de um segundo.
Valores binários (0xFFDF
) agora são
assumidos como strings em vez de números. Isto corrige o
problema com conjunto de caracteres onde é conveniente
colocar a string como um valor binário. Com esta
alteração você deve usar CAST()
se
você quiser comparar valores binários numericamente como
inteiros:
SELECT CAST(0XFEFF AS UNSIGNED INTEGER) < CAST(0XFF AS UNSIGNED INTEGER)
Se você não usa CAST()
, uma
comparação lexicográfica da string será feita:
mysql> SELECT 0xFEFF < 0xFF;
-> 1
Usando itens binários em um contexto numérico ou
comparando-os usando o operador =
deve
funcionar como antes. (A opção --new
pode
ser usado para fazer o servidor 4.0 se comportar como 4.1 a
partir da versão 4.0.13.)
Para funções que produzem um valor
DATE
, DATETIME
, ou
TIME
, o resultado retornado para o
cliente agora está corrigido para ter um tipo temporal. Por
exemplo, no MySQL 4.1, você tem este resultado:
mysql>SELECT CAST("2001-1-1" as DATETIME);
->'2001-01-01 00:00:00'
No MySQL 4.0, o resultado é diferente:
mysql> SELECT CAST("2001-1-1" as DATETIME);
-> '2001-01-01'
Valores DEFAULT
não podem mais ser
especificado para colunas AUTO_INCREMENT
(Na versão 4.0, um valor DEFAULT
é
ignorado sem aviso, na 4.1 ocorre um erro).
LIMIT
não aceita mais argumentos
negativos. Use 18446744073709551615 em vez de -1.
SERIALIZE
não é mais uma opção
válida para sql_mode
. Deve-se usar
SET TRANSACTION ISOLATION LEVEL
SERIALIZABLE
. SERIALIZE
também
não é mais válido para a opção
--sql-mode
do mysqld
.
Use --transaction-isolation=SERIALIZABLE
Todas tabelas e colunas strings agora têm um conjunto de
caracter. See Capítulo 9, Conjunto de Caracteres Nacionais e Unicode. A informação do
conjunto de caracteres é mostrada por SHOW CREATE
TABLE
e mysqldump
. (O MySQL
versão 4.0.6 e acima pode ler o novo arquivo dump; versões
mais antigas não podem.)
O formato de definição de tabela usado nos arquivos
.frm
mudaram um pouco na versão 4.1. O
MySQL 4.0.11 e adiante leêm o novo formato
.frm
diretamente, mas versões mais
antigas não podem. Se você precisa mover tabelas da
versão 4.1. para uma mais nova que a 4.0.11, você de usar
mysqldump
. See
Secção 4.9.7, “mysqldump
, Descarregando a Estrutura de Tabelas e
Dados”.
Se você estiver executando vários servidores na mesma
máquina Windows, você deve usar uma opção
--shared_memory_base_name
diferentes para
cada máquina
A interface para agrupar funções UDF alterou um pouco.
Você deve agora declarar uma função
xxx_clear()
para cada função de
agrupamento.
Em geral, atualizar para o MySQL 4.1 a partir de uma versão mais nova do MySQL envolve os serguintes passos:
Verifique na seção de alterações se houve alguma mudança que pode afetar a sua aplicação.
Leia os novos itens da versão 4.1 para ver quais itens interessantes que você pode usar na versão 4.1. See Secção D.2, “Alterações na distribuição 4.1.x (Alpha)”.
Se você estiver executando o MySQL Server no Windows, veja também Secção 2.5.8, “Atualizando o MySQL no Windows”.
Após o upgrade, atualize a tabela de permissões para gerar
uma nova coluna Password
maior que é
necessária para tratamento seguro de senhas. O procedimento
usa mysql_fix_privilege_tables
e está
descrito em Secção 2.5.6, “Atualizando a Tabela de Permissões”.
Estratégias alternativas para tratamento de senhas depois
de uma atualização estão descritos posteriormente nesta
seção.
O mecanismo de hashing da senha foi alterado na versão 4.1 para fornecer maior segurança, mas ele pode causar problemas de compatibilidade se você ainda tiver clientes que usam a biblioteca cliente 4.0 ou anterior. (É bastante indesejável que você tenha clientes 4.0 em situações onde o cliente conecta de uma máquina remota que ainda não tenha sido atualizada para a versão 4.1). A seguinte lista indica algumas estratégias possíveis de atualização. Elas representam o que se deve fazer para escolher se ter compatibilidade com clientes antigos e ter maior segurança.
Não atualizar para a versão 4.1. Nenhum comportamento será alterado, mas é claro que você não poderá usar qualquer um dos novos recursos fornecido pelo protocolo cliente/servidor da versão 4.1. (O MySQL 4.1 tem um protocolo cliente/servidor extendido que oferece tais recursos como instruções preparadas e conjuntos de múltiplos resultados.) See Secção 12.1.4, “Instruções Preparadas da API C”.
Atualizar para a versão 4.1 e executar o script
mysql_fix_privilege_tables
para aumentar
a coluna Password
na tabela
user
e assim poder guardar hashes de
senhas longos. Mas execute o servidor com a opção
--old-passwords
para fornecer
compatibilidade com versões anteriores que premitem que
clientes pre-4.1 continuem a conectar em suas contas de hash
curto. Eventualmente, quando todos os seus clientes
estiverem atualizados para a versão 4.1, você pode parar
de usar a opção do servidor
--old-passwords
. Você também pode alterar
as senhas em sua conta MySQL para usar o novo formato que é
mais seguro.
Atualizar para versão 4.1 e executar o script
mysql_fix_privilege_tables
para aumentar
a coluna Password
na tabela
user
. Se você sabe que todos os clientes
também foram atualizados para a versão 4.1, não execute o
servidor com a opção --old-passwords
. Em
vez disso, altere a senha em todas as contas existentes para
que elas tenham o novo formato. Uma instalação pura da
versão 4.1 é o mais seguro.
Informações adicionais sobre hashing de senha em relação a autenticação no cliente e operações de alteração de senha podem ser encontrados em Secção 4.3.11, “Hashing de Senhas no MySQL 4.1”.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.