Estou confuso, Se alguém puder ajudar a entender agradeço.
em uma tabela CHARACTER SET utf8 COLLATE utf8_general_ci ;
Em um SQL tenho em set names = utf8;
/*!40101 SET NAMES utf8*/;
CREATE TABLE IF NOT EXISTS `name` (
`id` INT NOT NULL,
`nome` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `name` (`id`,`nome`) VALUES
('0', 'João'),
('1', 'José'),
('2', 'Cláudio');
neste caso os dados foram inserido exatamente como mostrado:
+----+---------+
| id | nome |
+----+---------+
| 0 | João |
| 1 | José |
| 2 | Cláudio |
+----+---------+
O que me causou espanto, pois achei que seriam inseridos:
+----+----------+
| id | nome |
+----+----------+
| 0 | João |
| 1 | José |
| 2 | Cláudio |
+----+----------+
Depois de varias tentativas para mudar o texto e um dia de trabalho perdido, resolvi tentar criar uma tabela em latin1 e depois converte-la para utf8 com a esperança de que na conversão os dados fossem convertidos juntos então:
/*!40101 SET NAMES latin1*/;
CREATE TABLE IF NOT EXISTS `name` (
`id` INT NOT NULL,
`nome` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `name` (`id`,`nome`) VALUES
('0', 'João'),
('1', 'José'),
('2', 'Cláudio');
E para minha surpresa:
+----+----------+
| id | nome |
+----+----------+
| 0 | João |
| 1 | José |
| 2 | Cláudio |
+----+----------+
Então percebi que alterando o set names para latin1 os dados eram inseridos na maneira que preciso;
Isso me deixou confuso, então gostaria de entender o que esta acontecendo, onde estou errando na linha de raciocínio.
Se puderem me dizer onde estou equivocado agradeço.
Para mim em uma tabela utf8 os dados são armazenados desta forma: João, José ,Cláudio;
E em uma tabela latin: João, José, Cláudio;
Então porque precisei setar set names para latin em uma tabela utf8 para os dados serem inseridos corretos?
Desde já agradeço.