数码资讯
探索varcharMySQL中定义的长度
utf8的字符集: SQL >创建测试表(ID int auto_increment varchar(10),名,主键(ID)); SQL >插入测试值(null,'1234567890); 查询OK,1行受影响(0秒) SQL >插入测试值(null,yiersansiwuliuqibajiush
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
utf8的字符集:
SQL >创建测试表(ID int auto_increment varchar(10),名,主键(ID));
SQL >插入测试值(null,'1234567890);
查询OK,1行受影响(0秒)
SQL >插入测试值(null,yiersansiwuliuqibajiushi);
查询OK,1行受影响(0秒)
SQL >插入测试值(null,'abcdefghig);
查询OK,1行受影响(0.01秒)
插入到测试值(null,12345678901);
错误1406(22001):太长column'name'at 1行数据
SQL >插入测试值(null,1'Yiersansiwuliuqibajiushi);
错误1406(22001):太长column'name'at 1行数据
SQL >插入测试值(null,yiersansiwuliuqibajiushiyi);
错误1406(22001):太长column'name'at 1行数据
SQL >选择ID、名称、长度(名字),char_length(名称)从测试;
+ -- + + + + -------------------------------- -------------- -------------------
| ID | |名称长度(名字)char_length(名字)| |
+ -- + + + + -------------------------------- -------------- -------------------
| 1 1234567890 10 10 | | | |
| 2 | yiersansiwuliuqibajiushi | 30 | 10 |
| 3 | abcdefghig | 10 | 10 |
+ -- + + + + -------------------------------- -------------- -------------------
3行(0秒)
GBK字符集:
SQL >创建测试表(ID int auto_increment varchar(10),名,主键(ID));
SQL >插入测试值(null,'1234567890);
查询OK,1行受影响(0秒)
SQL >插入测试值(null,yiersansiwuliuqibajiushi);
查询OK,1行受影响(0秒)
SQL >插入测试值(null,'abcdefghig);
查询OK,1行受影响(0.01秒)
插入到测试值(null,12345678901);
错误1406(22001):太长column'name'at 1行数据
SQL >插入测试值(null,1'Yiersansiwuliuqibajiushi);
错误1406(22001):太长column'name'at 1行数据
SQL >插入测试值(null,yiersansiwuliuqibajiushiyi);
错误1406(22001):太长column'name'at 1行数据
SQL >选择ID、名称、长度(名字),char_length(名称)从测试;
+ -- + + + + ---------------------- -------------- -------------------
| ID | |名称长度(名字)char_length(名字)| |
+ -- + + + + ---------------------- -------------- -------------------
| 1 1234567890 10 10 | | | |
| 2 | yiersansiwuliuqibajiushi | 20 | 10 |
| 3 | abcdefghig | 10 | 10 |
+ -- + + + + ---------------------- -------------- -------------------
3行(0秒)
可以看出,定义为varchar的长度特征,甚至1多字节字符是1个字符,如中文和英文字母为1个字符。
那么什么是varchar可以定义的最大长度这与当前使用的字符集有关。字符的最大长度为65535字节,这是所有列共享的最大行大小,并且当放置在不同字符集时可以定义的最大长度是不同的。例如,默认是21845。据说在mysql5 varchar的长度也是性格,mysql4是字节。未经证实的、感兴趣的环境可以用本身。
顺便说一下,char数据类型定义的长度也是字符,最大长度为255。
SQL >创建测试表(ID int auto_increment,名字char(5),主键(ID));
查询OK,0行受影响(0.09秒)
SQL >插入测试值(null,'123);
查询OK,1行受影响(0秒)
SQL >插入测试值(null,'12345);
查询OK,1行受影响(0秒)
插入到测试值(null,‘123');
查询OK,1行受影响(0秒)
插入到测试值(null,‘12345');
查询OK,1行受影响(0秒)
插入到测试值(null,123456);
错误1406(22001):太长column'name'at 1行数据
插入到测试值(null,12345 - 1′);
错误1406(22001):太长column'name'at 1行数据
SQL >选择ID、名称、长度(名字),char_length(名称)从测试;
+ -- + + + + ----------------- -------------- -------------------
| ID | |名称长度(名字)char_length(名字)| |
+ -- + + + + ----------------- -------------- -------------------
| 1 123 3 3 | | | |
| 2 12345 5 5 | | | |
| 3 123 9 3 | | | |
| 4 12345 15 5 | | | |
+ -- + + + + ----------------- -------------- -------------------
4行(0秒)
SQL >创建测试表(ID int auto_increment varchar(10),名,主键(ID));
SQL >插入测试值(null,'1234567890);
查询OK,1行受影响(0秒)
SQL >插入测试值(null,yiersansiwuliuqibajiushi);
查询OK,1行受影响(0秒)
SQL >插入测试值(null,'abcdefghig);
查询OK,1行受影响(0.01秒)
插入到测试值(null,12345678901);
错误1406(22001):太长column'name'at 1行数据
SQL >插入测试值(null,1'Yiersansiwuliuqibajiushi);
错误1406(22001):太长column'name'at 1行数据
SQL >插入测试值(null,yiersansiwuliuqibajiushiyi);
错误1406(22001):太长column'name'at 1行数据
SQL >选择ID、名称、长度(名字),char_length(名称)从测试;
+ -- + + + + -------------------------------- -------------- -------------------
| ID | |名称长度(名字)char_length(名字)| |
+ -- + + + + -------------------------------- -------------- -------------------
| 1 1234567890 10 10 | | | |
| 2 | yiersansiwuliuqibajiushi | 30 | 10 |
| 3 | abcdefghig | 10 | 10 |
+ -- + + + + -------------------------------- -------------- -------------------
3行(0秒)
GBK字符集:
SQL >创建测试表(ID int auto_increment varchar(10),名,主键(ID));
SQL >插入测试值(null,'1234567890);
查询OK,1行受影响(0秒)
SQL >插入测试值(null,yiersansiwuliuqibajiushi);
查询OK,1行受影响(0秒)
SQL >插入测试值(null,'abcdefghig);
查询OK,1行受影响(0.01秒)
插入到测试值(null,12345678901);
错误1406(22001):太长column'name'at 1行数据
SQL >插入测试值(null,1'Yiersansiwuliuqibajiushi);
错误1406(22001):太长column'name'at 1行数据
SQL >插入测试值(null,yiersansiwuliuqibajiushiyi);
错误1406(22001):太长column'name'at 1行数据
SQL >选择ID、名称、长度(名字),char_length(名称)从测试;
+ -- + + + + ---------------------- -------------- -------------------
| ID | |名称长度(名字)char_length(名字)| |
+ -- + + + + ---------------------- -------------- -------------------
| 1 1234567890 10 10 | | | |
| 2 | yiersansiwuliuqibajiushi | 20 | 10 |
| 3 | abcdefghig | 10 | 10 |
+ -- + + + + ---------------------- -------------- -------------------
3行(0秒)
可以看出,定义为varchar的长度特征,甚至1多字节字符是1个字符,如中文和英文字母为1个字符。
那么什么是varchar可以定义的最大长度这与当前使用的字符集有关。字符的最大长度为65535字节,这是所有列共享的最大行大小,并且当放置在不同字符集时可以定义的最大长度是不同的。例如,默认是21845。据说在mysql5 varchar的长度也是性格,mysql4是字节。未经证实的、感兴趣的环境可以用本身。
顺便说一下,char数据类型定义的长度也是字符,最大长度为255。
SQL >创建测试表(ID int auto_increment,名字char(5),主键(ID));
查询OK,0行受影响(0.09秒)
SQL >插入测试值(null,'123);
查询OK,1行受影响(0秒)
SQL >插入测试值(null,'12345);
查询OK,1行受影响(0秒)
插入到测试值(null,‘123');
查询OK,1行受影响(0秒)
插入到测试值(null,‘12345');
查询OK,1行受影响(0秒)
插入到测试值(null,123456);
错误1406(22001):太长column'name'at 1行数据
插入到测试值(null,12345 - 1′);
错误1406(22001):太长column'name'at 1行数据
SQL >选择ID、名称、长度(名字),char_length(名称)从测试;
+ -- + + + + ----------------- -------------- -------------------
| ID | |名称长度(名字)char_length(名字)| |
+ -- + + + + ----------------- -------------- -------------------
| 1 123 3 3 | | | |
| 2 12345 5 5 | | | |
| 3 123 9 3 | | | |
| 4 12345 15 5 | | | |
+ -- + + + + ----------------- -------------- -------------------
4行(0秒)
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。