我确定有一个非常明显的答案但是:
为什么字段length
中字符串的(字节长度)varchar
比实际字符串短?
例如
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
表字符集与您的客户端字符集不同。因此,当您在客户端中键入“”时,您指的是与
select testdata from test1;
运行insert into test1 (
testdata时的结果不同的字符串) VALUES('ÂÂÂÂ');
,隐式转换为 latin1 字符集,字符串每个字符只需要 1 个字节。当您输入length('ÂÂÂÂ')
客户端时,不会发生此类转换。