mysql VARCHAR的最大长度到底是多少

mysql VARCHAR的最大长度到底是多少,第1张

MySQL 数据库的varchar类型在4.1以下的版本中的最大长度限制为255,其数据范围可以是0~255或1~255(根据不同版本数据库来定)。在 MySQL5.0以上的版本中,varchar数据类型的长度支持到了65535,也就是说可以存放65532个字节的数据,起始位和结束位占去了3个字 节,也就是说,在4.1或以下版本中需要使用固定的TEXT或BLOB格式存放的数据可以使用可变长的varchar来存放,这样就能有效的减少数据库文件的大小。

VARCHAR值保存时只保存需要的字符数,另加一个字节来记录长度(如果列声明的长度超过255,则使用两个字节)。VARCHAR值保存时不进行填充。当值保存和检索时尾部的空格仍保留,符合标准SQL。VARCHAR类型的实际长度是它的值的实际长度+1

VARCHAR是变长类型,对于其存储需求取决于列值的实际长度(在前面的表格中用L表示),而不是取决于类型的最大可能尺寸。例如,一个VARCHAR(10)列能保存最大长度为10个字符的一个字符串,实际的存储需要是字符串的长度 ,加上1个字节以记录字符串的长度。对于字符串'abcd',L是4而存储要求是5个字节。

Mysql5根据编码不同,存储大小也不同,具体有以下规则:

编码长度限制

字符类型若为gbk,每个字符最多占2个字节,最大长度不能超过32766

字符类型若为utf8,每个字符最多占3个字节,最大长度不能超过21845。

若定义的时候超过上述限制,则varchar字段会被强行转为text类型,并产生warning。

c) 行长度限制

导致实际应用中varchar长度限制的是一个行定义的长度。 MySQL要求一个行的定义长度不能超过65535。若定义的表长度超过这个值,则提示

ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs。

总之,mysql的vachar字段的类型虽然最大长度是65535,但是并不是能存这么多数据,最大可以到65533(不允许非空字段的时候),当允许非空字段的时候只能到65532。

每个数据库最多可以有65533个数据文件,如果用bigfile tablespace,也就是一个表空间只能有一个数据文件,如果db_block_size=32k,则每个表空间最大可达128T

因此数据库最大可以是65533*128T那么大

具体可以看oracle官方文档 http://docs.oracle.com/cd/E11882_01/server.112/e40402/limits002.htm#REFRN0042

create databases handle

create table user(

id int unsigned not null auto_increment primary key,

name varchar(8),

sex tinyint(1) default '1',

score int not null,

state tinyint(1)

)

2.向表中添加数据(不示例)

3.创建index.html客户端,a.php服务端1,b.php服务端2

Index.html:

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>客户端</title>

</head>

<body>

<button onclick="send('a.php?state=0')">开始请求</button>

<div style="position: fixedwidth: 500pxheight: 300pxtop: 100pxbackground: gray">

<span style="color: whitefont-size: 20px"></span>

</div>

<script type="text/javascript" src="./jquery-1.10.2.min.js"></script>

<script type="text/javascript">

//创建一个模态框

function display(value){

$('span').html(value)

}

//ajax

function send(dizhi){

$.ajax({

type: "get",

url: dizhi,

success: function(msg){

var arr=JSON.parse(msg)

console.log(arr)

//alert(arr.value)

var tishi="已经处理 "+arr.now +"个,共"+arr.all+"个"

display(tishi)

if(arr.now!=arr.all){

send("a.php?now="+arr.now+"&all="+arr.all)

}else{

alert("完成!")

}

}

})

}

</script>

</body>

</html>

a.php:

<?php

require('./dbconfig.php')

$link=mysql_connect(HOST,USER,PASS) or die('数据库链接失败')

mysql_select_db(DBNAME)

/*

查询数据

$sql="select * from user"

$result=mysql_query($sql)

$row=mysql_fetch_assoc($result)

var_dump($row)

*/

/*

循环插入

for($i=3$i<=100$i++){

$sql= "insert into user(name,score,state) values('z".$i."',".$i.",1)"

mysql_query($sql)

}

*/

/*查询需要处理的数据总数*/

//isset($_GET['state'])?$_GET['state']:0

if(isset($_GET['state'])){

$sql="select count(*) from user"

$result=mysql_query($sql)

$all=mysql_result($result,0)

$now=0

header("Location: b.php?all={$all}&now=0")

}else{

header("Location: b.php?all={$_GET['all']}&now={$_GET['now']}")

}

/*返回当前处理的数据*/

b.php:

<?php

require('./dbconfig.php')

$link=mysql_connect(HOST,USER,PASS) or die('数据库链接失败')

mysql_select_db(DBNAME)

/*返回当前处理的数据*/

//$id=$_GET['id']//获取将要处理的id

$now=$_GET['now']//已经处理的个数

$all=$_GET['all']//总共要处理的个数

$sql="select score from user limit {$now},1"

$result=mysql_query($sql)

$value=mysql_result($result, 0)

$now++

$arr=array(

'now'=>$now,

'all'=>$all,

'value'=>$value

)

//print_r($arr)

echo json_encode($arr)

dbconfig.php:

<?php

define('HOST','127.0.0.1')

define('USER', 'root')

define('PASS','root')

define('DBNAME','handle')


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6776385.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-28
下一篇 2023-03-28

发表评论

登录后才能评论

评论列表(0条)

保存