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 handlecreate 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')
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)