mysql建立mysql 字段不限制长度时的mysql 字段不限制长度长度限制问题

博客分类:
参考:
/blog/707749
MySQL的每个单表中所创建的索引长度是有限制的,且对不同存储引擎下的表有不同的限制。
在MyISAM表中,创建组合索引时,创建的索引长度不能超过1000,注意这里索引的长度的计算是根据表字段设定的长度来标量的,例如:
create table test(id int,name1 varchar(300),name2 varchar(300),name3 varchar(500))charset=latin1 engine=
create index test_name on test(name1,name2,name3);
此时报错:Specifmax key length is 1000 bytes.
我们这个测试,
create table test(test varchar(767) primary key)charset=latin5;
create table test(test varchar(768) primary key)charset=latin5;
-- ERROR ): Specif max key length is 767 bytes
create table test(test varchar(383) primary key)charset=GBK;
create table test(test varchar(384) primary key)charset=GBK;
-- ERROR ): Specif max key length is 767 bytes
create table test(test varchar(255) primary key)charset=UTF8;
create table test(test varchar(256) primary key)charset=UTF8;
-- ERROR ): Specif max key length is 767 bytes
如果你还看不错区别,那我只要明说了。
MySQL的varchar主键只支持不超过768个字节 或者 768/2=384个双字节 或者 768/3=256个三字节的字段
而 GBK是双字节的,UTF-8是三字节的。 MySQL ERROR ): Specif max key length is 767 bytes 的原因分析
浏览: 5233162 次
来自: 广州
kris_zhang 写道如果有多个@Primary 会怎么样 ...
@PathVariable String department ...
1)Day.valueOf(&SUNDAY&quot ...
如果有多个@Primary 会怎么样?
今天也遇到这个问题了,果然好用,谢谢分享。
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'其他回答(1)
园豆:25559
&&&您需要以后才能回答,未注册用户请先。用户名:Cruepan
文章数:12
访问量:5985
注册日期:
阅读量:1297
阅读量:3317
阅读量:585065
阅读量:470605
51CTO推荐博文
& &一行中可以容纳多少字段长度?每个字段拥有长度又可以是多少?是否数据类型的限制长度固定不变?带着这几个问题,我们开始进行一系列研究。一、行容纳的字段长度& &众所周知,记录是以行的形式进行保存的,Mysql5.1以后,行的保存格式默认为Compact格式。行记录Compact格式为:变长字段NULL标志位记录头信息列1数据列2数据列3数据...& &第一个变长字段是记录这行的总字段长度,如果行记录的字段总长小于255字节,变长字段就占一个字节(一个字节有8位,8位的二进制最多能表示到255)。当大于255时,变长字段的长度就是两个字节。Mysql规定变成字段不超过两个字节,就意味着行的段总长最多不能超过65535个字节(两个字节有16位,16位最多能表示65535)mysql&&create&table&test_limit&(idvarchar(65531),name&char(1)&)charset=latin1;
Query&OK,&0&rows&affected&(0.00&sec)可以看出来32&=-1-2, -1是因为一个字节不存数据,-2是因为两个字节varchar的长度)mysql&&create&table&test_limit&&(id&varchar(65531),name&char(2))charset=latin1;
ERROR&):&Row&size&too&large.&Themaximum&row&size&for&the&used&table&type,&not&counting&BLOBs,&is&65535.&Thisincludes&storage&overhead,&check&the&manual.&You&have&to&change&some&columns&toTEXT&or&BLOBs& & & & & & & & & & &所以不被允许二、每个字段容纳长度& &每个字段长度首先要符合字符类型限制的长度,然后再看是否符合行的段总长。& &值得注意的是,对于varchar的最大长度来说要根据字符集而变化。mysql&&create&table&varchar_var&(idvarchar(65531))&charset=utf8;
ERROR&):&Column&length&too&bigfor&column&'id'&(max&=&21845);&use&BLOB&or&TEXT&insteadUtf8中一个字符相当于3个字节,所以需要65 536/3≈21845mysql&&create&table&varchar_var&(idvarchar(41843),name&int&)charset=
ERROR&):&Column&length&too&bigfor&column&'id'&(max&=&32767);&use&BLOB&or&TEXT&insteadGbk中一个字符相当于2个字节,65 536/2≈32767mysql&&create&table&varchar_var&(idvarchar(75536)&)charset=latin1;
ERROR&):&Column&length&too&bigfor&column&'id'&(max&=&65535);&use&BLOB&or&TEXT&insteadlatin1是一个字符相当于一个字节mysql&&create&table&extend_char&(namechar(1));
mysql&&insert&into&extend_char&values&('的我');
ERROR&):&Data&too&long&forcolumn&'name'&at&row&1可见,char(1)只保存一个字符,在存储中utf8字符集的占3个字节& int固定占的是4个字节,4个8位二进制所以表示范围为-2 147 483 648~。既然是固定占4个字节,那么Int(1),int(2)在存储空间上就差别不大。唯一的区别在于当你设置zerofill才能显现,他会用0补足显示宽度:mysql&&create&table&extend_int_zero(name&int&zerofill)&charset=latin1;
Query&OK,&0&rows&affected&(0.02&sec)
mysql&&insert&into&extend_int_zerovalues&(1);
Query&OK,&1&row&affected&(0.01&sec)
mysql&&select&*&from&extend_int_
+------------+
|&name&&&&&&|
+------------+
+------------+当int不写显示宽度时默认为int(11)三、实战分析mysql&&create&table&row_for&(idvarchar(21843),name&int&);这是在utf8字符集下的,你看看这句是否会执行成功呢?&29##utf8中一个字符等于三个字集33##int占4个字节=65535##前面提及的,一个字节不存数据,两个字节存放长度所以这一行的总字段长度65535,,因为65535正好超过了行的段规定长度所以不被允许。&如果将varchar类型下调一个字符,那就正确了mysql&&create&table&row_d&(idvarchar(21842),name&int&);
Query&OK,&0&rows&affected&(0.02&sec)本文出自 “” 博客,转载请与作者联系!
了这篇文章
类别:┆阅读(0)┆评论(0)博客访问: 4376730
博文数量: 190
博客积分: 3600
博客等级: 中校
技术积分: 10372
注册时间:
专注系统运维、网络架构,研究技术解决方案,记录我的思想轨迹、工作学习、生活和关注的领域
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
发布时间: 16:54:23
MySQL MyIsam 存储引擎在创建索引的时候,索引键长度是有一个较为严格的长度限制的,所有索引键最大长度总和不能超过1000,而且不是实际数据长度的总和,而是索引键字段定义长度的总和。......
阅读(9370) | 评论(0) | 转发(4)
发布时间: 16:48:22
利用keepalived检测MySQL服务器的状态,如果有一台服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的MySQL服务器从系统中剔除,当MySQL服务器工作正常后Keepalived自动将MySQL服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的MySQL服务器。......
阅读(5276) | 评论(0) | 转发(5)
发布时间: 16:29:31
开始Gzip压缩,不仅可以加快网页打开速度,改善用户的浏览体验外,另一个潜在的好处是Gzip与搜索引擎的抓取工具有着更好的关系。......
阅读(27256) | 评论(0) | 转发(6)
发布时间: 17:22:33
为了保证一个PHP页面在后台运行,写了一个监控脚本,假设程序异常退出,那么可以自动重启。......
阅读(4279) | 评论(0) | 转发(2)
发布时间: 14:11:57
近期在测试MySQL双主多个slave架构,利用keepavlied实现自动切换Master。主要工作有:1、MySQL Mater-Maste工作(前期)2、Keepavlied搭建,还可以结合MySQL Proxy实现读写分离3、处理Master-Mater-Slave之间的同步关系首先,先搭建Mater-Master的环境。一、安装环境:系统版本:RHEL5.4.x86_64MySQL版本:mysql-5.0.45Mysqlserver_1:&192.168.15.178Mysqlserver_2:&192.168.15.185二、正式安装:在两台服务器中分别安装My......
阅读(17492) | 评论(0) | 转发(9)
给主人留下些什么吧!~~
请问我刚进入运维这一行,我很想做好,我该怎么做?推荐一些书籍吧!谢谢你
请登录后留言。博客分类:
因为最近要登记一些长度较大的数值,今天才仔细的查看了bigint的范围。
以前都忽略了mysql中数据长度的上限问题。
在mysql中创建表时,varchar类型必须指定长度,int类型可以不指定长度。当然,在mysql中使用界面创建表(不使用sql语句创建表),若不指定长度,它会为你指定默认长度,下面对mysql中常见的几种数据类型的默认长度和最大长度进行了总结。
范围(有符号)
范围(无符号)
(-128,127)
(-32 768,32 767)
(0,65 535)
(-8 388 608,8 388 607)
(0,16 777 215)
INT或INTEGER
(-2 147 483 648,2 147 483 647)
(0,4 294 967 295)
(-9 233 372 036 854 775 808,9 223 372 036 854 775
(0,18 446 744 073 709 551 615)
极大整数值
(-3.402 823 466 E+38,1.175 494 351 E-38),0,(1.175
494 351 E-38,3.402 823 466 351 E+38)
0,(1.175 494 351 E-38,3.402 823 466
单精度浮点数值
(1.797 693 134 862 315 7 E+308,2.225 073 858 507
201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7
0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862
315 7 E+308)
双精度浮点数值
对DECIMAL(M,D) ,如果M&D,为M+2否则为D+2
依赖于M和D的值
依赖于M和D的值
定长字符串
变长字符串
不超过 255 个字符的二进制字符串
短文本字符串
0-65 535字节
二进制形式的长文本数据
0-65 535字节
长文本数据
MEDIUMBLOB
0-16 777 215字节
二进制形式的中等长度文本数据
MEDIUMTEXT
0-16 777 215字节
中等长度文本数据
0-4 294 967 295字节
二进制形式的极大文本数据
0-4 294 967 295字节
极大文本数据
枚举、集合ENUM (最多65535个成员)
(最多64个成员)
大小(字节)
YYYY-MM-DD
'-838:59:59'/'838:59:59'
时间值或持续时间
00:00:00/ 23:59:59
YYYY-MM-DD HH:MM:SS
混合日期和时间值
00:00:00/2037 年某时
YYYYMMDD HHMMSS
混合日期和时间值,时间戳
浏览 12300
相关知识库:
浏览: 2221344 次
来自: 苏州
Qt5改动很多,要改改了。
楼主,2.2子查询的分页方式:SELECT * FROM ar ...
非常感谢楼主的用心指导,工具以及图片例子都提供了
问下这个图片怎么解压损坏呀
楼主讲解的非常详细,还附带工具和图片例子,非常感谢
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 mysql 更改字段长度 的文章

 

随机推荐