Arquivo da tag: MySQL

Erro do MySQL no XAMPP: Error-Using unique option prefix ‘key_buffer’ is error-prone and can break in the future. Please use the full name ‘key_buffer_size’ instead

Ao tentar inicializar o MySQL server via painel de controle do XAMPP, o usuário recebe a mensagem de erro “Error-Using unique option prefix ‘key_buffer’ is error-prone and can break in the future. Please use the full name ‘key_buffer_size’ instead” Continue lendo

Como criar um servidor web LEMP (Linux, NginX, MySQL, PHP) no Google Cloud (Google Compute Engine)

Este tutorial tem como o objetivo ensinar todos os passos para que o usuário possa criar seu servidor Web a um baixo custo na plataforma Google Cloud. Continue lendo

Erro ao importar backup do banco de dados no MySQL: Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline

Ao tentar restaurar um backup no MySQL recebi a mensagem de erro:

ERROR 1118 (42000) at line 667: Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.

Isto é um problema causado por um Bug do InnoDB que pode ser consertado da seguinte maneira:

Encontre seu arquivo de configuração do MySQL. Caso você não saiba onde se localiza (ele pode mudar de pasta de acordo com o sistema que você está utilizando), utilizeo o comando abaixo e localize o arquivo que tenha a seção [mysqld]:

sudo find / -name "*.cnf"

Depois de encontrar o arquivo de configuração do MySQL, abra-o:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Adicione as duas linhas abaixo à seção [mysqld] (Configurações Básicas do MySQL):

innodb_log_file_size = 256M
innodb_strict_mode = 0

Salve as modificações e reinicie o servidor MySQL:

sudo /etc/init.d/mysql restart

Apague os dados e estruturas já criadas na tentativa de restauração anterior do banco de dados; e realize uma nova tentativa de restaurar o banco de dados:

mysql -uUSUARIO -pSENHA NOMEDOBANCODEDADOS < ARQUIVO.sql

Como obter o próximo valor de um campo auto-incremental no mysql

Quem trabalha com o Oracle PL/SQL sabe que você pode obter isso através do NextVal() da seqüência, mas como fazer isso no MySQL?

Eu estava tentando gerar um código Hash para ser utilizado como uma referência externamente a um documento – para não exibir o ID interno usado na tabela -, mas não queria utilizar duas consultas (Um insert, e um select para obter o valor inserido).

Para resolver este problema em uma consulta apenas, criei uma função no banco de dados que me retornaria este valor:


CREATE FUNCTION `getAutoincrementalNextVal`(`TableName` VARCHAR(50))
	RETURNS BIGINT
	LANGUAGE SQL
	NOT DETERMINISTIC
	CONTAINS SQL
	SQL SECURITY DEFINER
	COMMENT ''
BEGIN

DECLARE Value BIGINT;

SELECT
	AUTO_INCREMENT INTO Value
FROM
	information_schema.tables
WHERE
	table_name = TableName AND
	table_schema = DATABASE();

RETURN Value;

END

Para utilizar esta função, basta passar como parâmetro o nome da tabela que se deseja obter o valor do próximo ID (campo auto-incremental):

SELECT getAutoincrementalNextval ('document')

No meu código, para gerar o Hash para o documento, fiz da seguinte forma:

INSERT INTO
    document (Code, Title, Body)
VALUES ( 				
    sha1( concat (convert (now(), char), ' ', getAutoincrementalNextval ('document') ) ),
    'Title',
    'Body'
);

Este código hash foi apenas uma forma de não expor ao usuário o código interno de meu documento. Para gerar um código único eu crio uma pré-imagem SHA-1 baseada na junção da hora atual e o ID do registro.