Tenho certeza de que há uma resposta realmente óbvia, mas:
Por que o length
(comprimento do byte) de uma string em um varchar
campo é menor que a string real?
por exemplo
CREATE TABLE `test1` (
`testdata` varchar(4) DEFAULT NULL
) CHARSET=latin1;
insert into test1 (`testdata`) VALUES('ÂÂÂÂ');
select
testdata,
length(testdata),
char_length(testdata),
length('ÂÂÂÂ'),
char_length('ÂÂÂÂ')
from test1
**result:**
testdata: ÂÂÂÂ
length: 4
char_length: 4
length: 8
char_length: 4
O conjunto de caracteres da tabela é diferente do conjunto de caracteres do cliente. Portanto, quando você digita 'ÂÂÂÂ' em seu cliente, está se referindo a uma string diferente do resultado de
select testdata from test1;
Quando você executouinsert into test1 (
testdata) VALUES('ÂÂÂÂ');
, houve uma conversão implícita para o conjunto de caracteres latin1, que precisa apenas de 1 byte por caractere para a string. Essa conversão não acontece quando você digitalength('ÂÂÂÂ')
em seu cliente.