MySQL数据类型 int什么意思

MySQL数据类型 int什么意思,第1张

int(m)

zerofill,加上zerofill后m才表现出有点点效果,比如

int(3)

zerofill,你插入到数据里的是10,则实际插入为010,也就是在前面补充加了一个0.如果int(3)和int(10)不加

zerofill,则它们没有什么区别.m不是用来限制int个数的.int(m)的最大值和最小值与undesigned有关,最下面那副图有说明.

mysql>

create

table

t

(t

int(3)

zerofill)

query

ok,

0

rows

affected

(0.00

sec)

mysql>

insert

into

t

set

t

=

10

query

ok,

1

row

affected

(0.00

sec)

mysql>

select

*

from

t

+——+

|

t

|

+——+

|

010

|

+——+

1

row

in

set

(0.11

sec)

zerofill

with

default

width,

the

same

as

int(10):

mysql>

create

table

t

(t

int

zerofill)

query

ok,

0

rows

affected

(0.02

sec)

mysql>

insert

into

t

set

t

=

10

query

ok,

1

row

affected

(0.02

sec)

mysql>

select

*

from

t

+————+

|

t

|

+————+

|

0000000010

|

+————+

1

row

in

set

(0.08

sec)

without

zerofill:

mysql>

create

table

t

(t

int)

query

ok,

0

rows

affected

(0.01

sec)

mysql>

insert

into

t

set

t

=

10

query

ok,

1

row

affected

(0.01

sec)

mysql>

select

*

from

t

+——+

|

t

|

+——+

|

10

|

+——+

1

row

in

set

(0.00

sec)

无论是在小得可怜的免费数据库空间或是大型电子商务网站 合理的设计表结构 充分利用空间是十分必要的 这就要求我们对数据库系统的常用数据类型有充分的认识 下面我就将我的一点心得写出来跟大家分享

   一 数字类型

数字类型按照我的分类方法分为三类 整数类 小数类和数字类

我所谓的 数字类 就是指DECIMAL和NUMERIC 它们是同一种类型 它严格的说不是一种数字类型 因为他们实际上是将数字以字符串形式保存的 他的值的每一位(包括小数点)占一个字节的存储空间 因此这种类型耗费空间比较大 但是它的一个突出的优点是小数的位数固定 在运算中不会 失真 所以比较适合用于 价格 金额 这样对精度要求不高但准确度要求非常高的字段

小数类 即浮点数类型 根据精度的不同 有FLOAT(单精度)和DOUBLE(双精度)两种 它们的优势是精确度 FLOAT可以表示绝对值非常小 小到约 E ( 小数点后面有 个零)的小数 而DOUBLE更是可以表示绝对值小到约 E ( 小数点后面有 个零)的小数 FLOAT类型和DOUBLE类型占用存储空间分别是 字节和 字节 如果需要用到小数的字段 精度要求不高的 当然用FLOAT了!可是说句实在话 我们 民用 的数据 哪有要求精度那么高的呢?这两种类型至今我没有用过——我还没有遇到适合于使用它们的事例

用的最多的 最值得精打细算的 是整数类型 从只占一个字节存储空间的TINYINT到占 个字节的BIGINT 挑选一个 够用 并且占用存储空间最小的类型是设计数据库时应该考虑的 TINYINT SMALLINT MEDIUMINT INT和BIGINT占用存储空间分别为 字节 字节 字节 字节和 字节 就无符号的整数而言 这些类型能表示的最大整数分别为 和 如果用来保存用户的年龄(举例来说 数据库中保存年龄是不可取的) 用TINYINT就够了 九城的《纵横》里 各项技能值 用SMALLINT也够了 如果要用作一个肯定不会超过 行的表的AUTO_INCREMENT的IDENTIFY字段 当然用 MEDIUMINT 不用 INT 试想 每行节约一个字节 行可以节约 兆多呢!

   二 日期时间类型

日期和时间类型比较简单 无非是 DATE TIME DATETIME TIMESTAMP和YEAR等几个类型 只对日期敏感 而对时间没有要求的字段 就用DATE而不用DATETIME是不用说的了 单独使用时间的情况也时有发生——使用TIME 但最多用到的还是用DATETIME 在日期时间类型上没有什么文章可做 这里就不再详述

三 字符(串)类型

不要以为字符类型就是 CHAR !CHAR和VARCHAR的区别在于CHAR是固定长度 只要你定义一个字段是CHAR( ) 那么不论你存储的数据是否达到了 个字节 它都要占去 个字节的空间 而VARVHAR则是可变长度的 如果一个字段可能的值是不固定长度的 我们只知道它不可能超过 个字符 把它定义为 VARCHAR( )是最合算的 VARCHAR 类型的实际长度是它的值的(实际长度+ ) 为什么 + 呢?这一个字节用于保存实际使用了多大的长度呀!从这个 + 中也应该看到 如果一个字段 它的可能值最长是 个字符 而多数情况下也就是用到了 个字符时 用VARCHAR就不合算了 因为在多数情况下 实际占用空间是 个字节 比用CHAR( )还多占用一个字节!

举个例子 就是一个存储股票名称和代码的表 股票名称绝大部分是四个字的 即 个字节 股票代码 上海的是六位数字 深圳的是四位数字 这些都是固定长度的 股票名称当然要用 CHAR( ) 股票代码虽然是不固定长度 但如果使用VARVHAR( ) 一个深圳的股票代码实际占用空间是 个字节 而一个上海的股票代码要占用 个字节!考虑到上海的股票数目比深圳的多 那么用VARCHAR( )就不如CHAR( )合算了

虽然一个CHAR或VARVHAR的最大长度可以到 我认为大于 的CHAR是几乎用不到的——很少有大于 个字节长度的固定长度的东东吧?不是固定长度的就用VARCHAR!大于 的VARCHAR也是几乎用不到的——比这更大的用TEXT就好了 TINYTEXT 最大长度为 占用空间也是(实际长度+ ) TEXT 最大长度 占用空间是(实际长度+ ) MEDIUMTEXT 最大长度 占用空间是(实际长度+ ) LONGTEXT 最大长度 占用空间是(实际长度+ ) 为什么 + ? + ? + ? + ?你要是还不知道就该打PP了 这些可以用在论坛啊 新闻啊 什么的 用来保存文章的正文 根据实际情况的不同 选择从小到大的不同类型

四 枚举和集合类型

枚举(ENUM)类型 最多可以定义 种不同的字符串从中做出选择 只能并且必须选择其中一种 占用存储空间是一个或两个字节 由枚举值的数目决定 集合(SET)类型 最多可以有 个成员 可以选择其中的零个到不限定的多个 占用存储空间是一个到八个字节 由集合可能的成员数目决定

举个例子来说 在SQLServer中 你可以节约到用一个Bit类型来表示性别(男/女) 但MySQL没有Bit 用TINTINT?不 可以用ENUM( 帅哥 美眉 )!只有两种选择 所以只需一个字节——跟TINYINT一样大 但却可以直接用字符串 帅哥 和 美眉 来存取 真是太方便啦!

lishixinzhi/Article/program/MySQL/201311/29648

有感于网上查到了大量相当有帮助的技术性文章,这里也把我前段时间实现的一个功能程序公布出来,供需者参考。

功能简介:服务器R(remote)只负责网站的运行和访问,每天获得一批新的原始数据,服务器L(local)负责后台运算,自动定时从服务器R的mysql里读取数据,在L上经过matlab编写的算法程序运算后再远程将结果写回R的数据库以实现网站的更新。全程无人值守。(L负责后台运算,安装matlabR负责网络访问,安装mysql)

不同于网络上查到的实现方法,本程序全部在m文件里编写,不用php 或c++做接口,宗旨就是用简单的方法实现简单的想法。(以下假定suanfa.m子程序已经存在)

1.编写import_data.m子程序,实现从mysql读取数据到matlab中.

1)下载mysql的jdbc的java驱动,安装到*:\Program Files\MATLAB71\java\jar\toolbox路径下;

2)此“路径\文件名”添到*:\Program Files\MATLAB71\toolbox\local下的classpath.txt文件中;

3)设置mysql下的数据库名称为带有“mysql ”后缀的,比如:abcmysql

4)服务器R的mysql下,输入“grant all on *.* to username@"L的IP" Identified by

"password",允许L远程访问;

5)复制如下代码到import_data文件中

function MM=import_data()

timeoutA=logintimeout(5)

% Set maximum time allowed for establishing a connection.

connA = database('mysql', 'username', 'password','com.mysql.jdbc.Driver','jdbc:mysql:

//R的IP:3306/abc')

ping(connA)% Check the database status.

cursorA=exec(connA,'SELECT ALL CONLUMA,CONLUMB,CONLUMC FROM tablename)

setdbprefs('DataReturnFormat','numeric')%set numeric format

cursorA=fetch(cursorA) % Fetch all rows of data.

MM=cursorA.Data % Display the data,save the data in MM

close(cursorA) % Close the cursor and the connection.

close(connA)

其中username,password,L\R的IP,数据库名称abc,tablename,sql语句都是要依实际修改的。

2.编写export_data.m子程序,实现从matlab写回数据到mysql中:

原理类似, (tablename2的表要事先建好u)复制以下程序:

timeoutA=logintimeout(5)

% Set maximum time allowed for establishing a connection.

connA = database('mysql', 'username', 'password','com.mysql.jdbc.Driver','jdbc:mysql:

//R的IP:3306/abc')

ping(connA)% Check the database status.

%delete the records before updating

cursorA=exec(connA,'delete tablename FROM tablename')

Colnames = %updating

fastinsert(connA, 'tablename2', Colnames,newdata)

close(cursorA)

close(connA);

其中username,password,R的IP,数据库名称abc,tablename,sql语句都是要以实际情况修改的,

newdata就是suanfa.m程序得到结果组成的矩阵,这些结果将写到数据库中tablename2的表中。

3.编写主程序以调用这些子程序:

4.编译m程序为exe程序:

(注意主程序头部的也要加“function”呦,否则作为脚本文件不能编译)

1)在matlab环境中配置编译器,输入mbuild -setup,依提示 *** 作;

2)输入mcc -m main.m suanfa.m import_data.m export_data.m生成与主程序同名的exe文件;

3)设置windows任务计划,添加此exe文件便可以自动定时读取、计算、更新网站数据库了。

ps:matlab7.0没有找到deploytool工具,没法连接数据库,要使用更高版本的matlab。

Database Toolbox 2

和关系数据库进行数据交换

Database 工具箱可以使你使用MATLAB 的数据分析

和可视化工具对存储在数据库中的数据进行分析。在

MATLAB 工作环境中, 您可以使用结构化查询语言进

行:

■ 对数据库中的数据进行读写

■ 使用约束条件对数据库进行 *** 作

您可以在MATLAB 中和绝大多数的数据库进行交

互, 包括Oracle、Sybase、Microsoft SQL Server、

MySQL、PostgreSQL 以及Microsoft Access 。该工具箱

还允许您在单个的MATLAB 任务中同时存取多个数据

库并且支持事务特性。它包含了Visual Query Builder

( 可视化查询工具), 它可以使您在不熟悉SQL 的情

况下和数据库进行交互。

Visual Query Builder

可以快速对您的数据

进行存取和图表显示

关键特性

■ 支持ODBC/JDBC 连接的数据库接口

包括Oracle、Sybase、Microsoft SQL

Server、MySQL、PostgreSQL 以及

Microsoft Access

■ 从MATLAB 中直接执行查询语句

■ 对于大数据量查询, 将增量获取数据

■ 在所有的数据导入和导出的过程中,

保留数据类型

■ 单个的MATLAB 任务中可以同时

存取多个数据库

■ 从一个数据库中导入数据,完成计

算后, 将结果输出到另外一个数据库

■ 在单个事务中获取大数据集, 或者分

割数据, 通过多个事务来完成

■ 通过在一个MATLAB 会话中保持数

据库连接来减少需要进行输入和输出

数据所需要的语句, 除非数据库连接

被显式关闭

■ 它可以使您在不熟悉SQL 的情况下

和数据库进行交互

在MATLAB 中对Microsoft Access 数据库进行查询

数据库工具箱函数列表

数据库访问函数

clearwarnings 清除数据库连接警告

close 关闭数据库连接

commit 数据库改变参数

database 连接数据库

exec 执行SQL语句和打开油标

get 得到数据库属性

insert 导出MATLAB单元数组数据到数据库表

isconnection 判断数据库连接是否有效

isreadonly 判断数据库连接是否只读

ping 得到数据库连接信息

rollback 撤销数据库变化

set 设置数据库连接属性

sql2native 转换JDBC SQL 语法为系统本身的SQL语法

update 用MATLAB单元数组数据代替数据库表的数据

数据库游标访问函数

attr 获得的数据集的列属性

close 关闭游标

cols 获得的数据集的列数值

columnnames 获得的数据集的列名称

fetch 导入数据到MATLAB单元数组

get 得到游标对象属性

querytimeout 数据库SQL查询成功的时间

rows 获取数据集的行数

set 设置游标获取的行限制

width 获取数据集的列宽

数据库元数据函数

bestrowid 得到数据库表唯一行标识

columnprivileges 得到数据库列优先权

columns 得到数据库表列名称

crossreference 得到主健和外健信息

dmd 创建数据库元数据对象

exportedkeys 得到导出外部健信息

get 得到数据库元数据属性

importedkeys 得到导入外健信息

indexinfo 得到数据库表的索引和统计

primarykeys 从数据库表或结构得到主健信息

procedurecolumns 得到目录存储程序参数和结果列

procedures 得到目录存储程序

supports 判断是否支持数据库元数据

tableprivileges 得到数据库表优先权

tables 得到数据库表名称

versioncolumns 得到自动更新表列

--------------------------------------------------------------------------------

Xinsoft,2004-08-11 20:28:15

数据库工具箱让用户使用MATLAB强大数据分析和可视化工具功能处理存储在数据库中的数据的复杂分析。在MATLAB环境下工作,可以用结构化查询语言SQL)命令:

读,写数据库的数据

简单和高级条件的数据查询

连接MATLAB和数据库包括Oracle,Sybase,Microsoft SQL Server和Informix。

可以用单一MATLAB同时访问多个数据库,进行大数据量的事务处理。不懂SQL的用户可以用Visual Query Builder处理数据。

重点

鲁棒接口能力。 用ODBC/JDBC连接数据库,包括Oracle,Sybase SQL Server,Sybase SQL Anywhere,Microsoft SQL Server, Microsoft Access,

Informix Ingres.

SQL语法。 在MATLAB环境直接执行SQL查询

动态导入数据。 调节SQL查询,把数据导入MATLAB。数据库工具箱满足小的和大的查询。

数据类型保存。 在数据导入和导出行为MATLAB保存数据类型

同时访问多个数据库。 从数据库导入数据,对该数据执行计算,然后导入到另一个数据库。

处理大数据集的能力。

连续状态的数据库连接:一旦和某个数据库的连接建立后,数据库一直是打开的,除非在MATLAB中执行关闭语句。这提高了数据库的读取速度,减少了不必要的命令来调入,输出数据 Visual Query Builder. 该图形用户接口列数据源和所有表和字段,不懂SQL的用户可以访问和查询数据库函数列表

数据库访问函数

clearwarnings 清除数据库连接警告

close 关闭数据库连接

commit 数据库改变参数

database 连接数据库

exec 执行SQL语句和打开油标

get 得到数据库属性

insert 导出MATLAB单元数组数据到数据库表

isconnection 判断数据库连接是否有效

isreadonly 判断数据库连接是否只读

ping 得到数据库连接信息

rollback 撤销数据库变化

set 设置数据库连接属性

sql2native 转换JDBC SQL 语法为系统本身的SQL语法

update 用MATLAB单元数组数据代替数据库表的数据

数据库游标访问函数

attr 获得的数据集的列属性

close 关闭游标

cols 获得的数据集的列数值

columnnames 获得的数据集的列名称

fetch 导入数据到MATLAB单元数组

get 得到游标对象属性

querytimeout 数据库SQL查询成功的时间

rows 获取数据集的行数

set 设置游标获取的行限制

width 获取数据集的列宽

数据库元数据函数

bestrowid 得到数据库表唯一行标识

columnprivileges 得到数据库列优先权

columns 得到数据库表列名称

crossreference 得到主健和外健信息

dmd 创建数据库元数据对象

exportedkeys 得到导出外部健信息

get 得到数据库元数据属性

importedkeys 得到导入外健信息

indexinfo 得到数据库表的索引和统计

primarykeys 从数据库表或结构得到主健信息

procedurecolumns 得到目录存储程序参数和结果列

procedures 得到目录存储程序

supports 判断是否支持数据库元数据

tableprivileges 得到数据库表优先权

tables 得到数据库表名称

versioncolumns 得到自动更新表列

MATLABER曰:

这是个很经典的介绍,

因为它涉及到MATLAB在金融学中的应用,甚至利用它可以作出很好的财务软件.

zhimingchen曰:Visual Query Builder 不支持汉字,所以我觉得使用 Visual Query Builder 不是最好的方法使用DAO,特别ADO是一种很好方法,可以做到与数据库无关请看我的一个访问数据库的实例:

function Table=GetTable(ConnectionStr,SqlStr)

%ConnectionStr为连接串,比如可以设置ConnectionStr='Data Source=HistryData2.0

Pr

ovider=MSDASQLUser ID=AdminPassword='

%SqlStr为SQL语句,

% 利用ADO调用数据源

try

MyConnection=actxserver('ADODB.Connection')

MyConnection.ConnectionString=ConnectionStr

invoke(MyConnection,'Open')

MyRecordset=invoke(MyConnection,'Execute',SqlStr)

%域信息

Fields=MyRecordset.Fields

%域个数

FieldNumber=Fields.Count

FieldNames=cell(1,FieldNumber)

%获取数据

% invoke(MyRecordset,'MoveFirst')

Data=invoke(MyRecordset,'GetRows')

MyRecordset.Source

%记录行数

RecordCount=size(Data,2)

for i=1:size(FieldNames,2)

TempField=get(Fields,'Item',i-1)

FieldNames=TempField.Name

end

%给Table赋植

Table.RecordCount=RecordCount

Table.FieldNames=FieldNames

Table.Data=Data

invoke(MyRecordset,'Close')

invoke(MyConnection,'Close')

catch

msgbox(lasterr,'Tint')

Table.Data={}

end

--------------------------------------------------------------------------------

Xinsoft,2004-08-11 20:28:37

一、通过MATLAB 提供的数据库引擎, 以下是MATLAB ,DATABASE TOOLBOX中的例子,

通过ODBC/JDBC 接口访问具体的数据库

function dbimportdemo()

%DBIMPORTDEMO Imports data into Matlab from a database.

% Version 1.0 21-Oct-1997

% Author(s): E.F. McGoldrick, 12/5/1997

% Copyright (c) 1984-2001 The MathWorks, Inc.

% $Revision: 1.7 $ $Date: 2001/01/12 16:22:06 $

% Set maximum time allowed for establishing a connection.

timeoutA=logintimeout(5)

% Connect to a database.

%打开数据源 SampleDB

connA=database('SampleDB','','')

% Check the database status.

ping(connA)

% Open cursor and execute SQL statement.

%执行SQL查询语句

cursorA=exec(connA,'select country from customers')

% Fetch the first 10 rows of data.

%获取前十行数据

cursorA=fetch(cursorA,10)

% Display the data.

%显示

AA=cursorA.Data

% Close the cursor and the connection.

%关闭

close(cursorA)

close(connA)

二、通过DAO访问数据库(DAO技术适合于访问ACCESS 2000以下版本的数据库,优点是功

齐全,具体可以参考MSDN关于DAO的帮助),以下是我自己摸索出来的,在MATLAB帮助文

中有关于如何调用EXCEL组件的方法。

Handle=actxserver('DAO.DBEngine.36')

MyWSS=get(Handle,'Workspaces')

Count=get(MyWSS,'Count')

MyWS=get(MyWSS,'Item',0)

%打开数据库

MyDB=invoke(MyWS,'OpenDatabase','D:\My Documents\test.mdb')

%打开数据库的表,得到一个指向记录集的指针

MyRS=invoke(MyDB,'OpenRecordset','用户')

%获取“用户”表的前十行数据

MyRows=invoke(MyRS,'GetRows','10')

%关闭

invoke(MyRS,'Close')

invoke(MyDB,'Close')

invoke(MyWS,'Close')

三、ADO技术(微软建议ACCESS 2000及以上版本的数据库应尽量通过ADO访问,优点是可

通过较少的对象访问数据库,ADO与今后微软的数据库技术发展方向一致,目前支持的功

稍微少了一些)具体访问的可以参考MSDN的帮助文件和ADO 类型库的方法原型。

四、通过dde进行动态数据交换,可以查看help

这是我帮你找来的。不知道对不对。找了很久的!


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

原文地址:https://54852.com/zaji/7326129.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存