澳门新莆京手机网站-新蒲京娱乐场 > 澳门新莆京手机网站 > MySQL中CHA奥迪Q7和VARCHACR-V类型演变和详细解释

MySQL中CHA奥迪Q7和VARCHACR-V类型演变和详细解释

浮点数与定点数

为了能够引起我们的垂青,在介绍浮点数与定位数在此之前先让大家看三个例证:
mysql> CREATE TABLE test (c1 float(10,2),c2 decimal(10,2));
Query OK, 0 rows affected (0.29 sec)

mysql> insert into test values(131072.32,131072.32);
Query OK, 1 row affected (0.07 sec)

mysql> select * from test;
+-----------+-----------+
| c1        | c2        |
+-----------+-----------+
| 131072.31 | 131072.32 |
+-----------+-----------+
1 row in set (0.00 sec)

从地点的事例中大家看到c1列的值由131072.32形成了131072.31,那正是浮点数的不精确性造成的。

在mysql中float、double(或real)是浮点数,decimal(或numberic)是定点数。

浮点数相对于定点数的优点是在长短一定的情况下,浮点数可以代表更加大的数目范围;它的欠缺是会挑起精度问题。在其后关于浮点数和确定地点数的接收中,我们要铭记在心以下几点:

  1. 浮点数存在误差难题;
  2. 对货币等对精度敏感的数额,应该用确定地点数表示或存款和储蓄;
  3. 编制程序中,若是用到浮点数,要特别注意引用误差难题,并尽量防止做浮点数相比;
  4. 要在乎浮点数中部分特殊值的拍卖。

 

ref:

  MySql常用数据类型定义了列中可以储存什么数据以致那个多少实际上怎么存款和储蓄。大致能够分成三类:

二、详解(MySQL5.1):

8. BLOB

BLOB相关品种也可以有相通的多样类型:

有各类BLOB相关品种,它们之间的异样在于允许的最大尺寸不风姿洒脱致。

TINYBLOB:1到253个字节。字段长度前缀1个字节。

 BLOB:256到65533个字节。字段长度前缀2个字节。

 MEDIUMBLOB:65536到2的贰13回方-1个字节。字段长度前缀3个字节。

LONGBLOB:2的23次方到2的32次方-1个字节。字段长度前缀4个字节。

mysql> create table b11 ( value int primary key, v blob(100));

Query OK, 0 rows affected (0.03 sec)

 

在定义数据表时,假诺应用BLOB(N卡塔尔国的花样定义字段,则实在字段类型被电动调节为最契合最大尺寸N的BLOB相关项目。

mysql> show create table b11;

+-------+---------------------------------------------------------------------------------------------------------------------------------+

| Table | Create Table                                                                                                                    |

+-------+---------------------------------------------------------------------------------------------------------------------------------+

| b11   | CREATE TABLE `b11` (

  `value` int(11) NOT NULL,

  `v` tinyblob,

  PRIMARY KEY (`value`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1 |

+-------+---------------------------------------------------------------------------------------------------------------------------------+

1 row in set (0.00 sec)

 

 

BLOB相关项目在实际上存款和储蓄和读取时,不会时有产生长度补足操作和截取操作,而是存款和储蓄和读取原始二进制数据内容。

 

mysql> insert into b11 values (1,unhex('01020300010203')),(2,'1234567890');

Query OK, 2 rows affected (0.01 sec)

Records: 2  Duplicates: 0  Warnings: 0

 

mysql> select value, v,hex(v) from b11;

+-------+------------+----------------------+

| value | v          | hex(v)               |

+-------+------------+----------------------+

|     1 |      | 01020300010203       |

|     2 | 1234567890 | 31323334353637383930 |

+-------+------------+----------------------+

2 rows in set (0.00 sec)

 

  1. CHA奥迪Q3 语法: CHA科雷傲 (lengthState of Qatar 当中 length 的取值范围为 1 到 255 。 超越255 则报错:...

text和blob

 

在应用text和blob字段类型时要注意以下几点,以便越来越好的抒发数据库的习性。

①BLOB和TEXT值也会唤起本人的有个别主题材料,极度是实施了大气的去除或更新操作的时候。删除这种值会在数据表中留下超大的"空洞",以往填入那几个"空洞"的笔录恐怕长度不一致,为了进步质量,建议准时选拔OPTIMIZE TABLE 功能对那类表打开零散收拾.

②运用合成的(synthetic)索引。合成的索引列在有些时候是卓有成效的。风流浪漫种方法是依靠别的的列的原委创设贰个散列值,并把那几个值存款和储蓄在单独的数据列中。接下来您就足以由此查找散列值找到数据行了。不过,大家要在乎这种技艺只好用来标准匹配的查询(散列值对于相近<或>=等范围找寻操作符 是从未有过用途的)。大家得以行使MD5(卡塔尔国函数生成散列值,也足以动用SHA1(卡塔尔(قطر‎或CRC32(卡塔尔国,大概利用自身的应用程序逻辑来计量散列值。请记住数值型散列值能够极高作用地蕴藏。相似,假如散列算法生成的字符串带有尾巴部分空格,就无须把它们存款和储蓄在CHA凯雷德或VARCHA凯雷德列中,它们会遭逢尾巴部分空格去除的影响。

合成的散列索引对于那多少个BLOB或TEXT数据列极度有用。用散列标记符值查找的进程比寻找BLOB列本人的速度快比较多。

③在不须要的时候幸免予检查索大型的BLOB或TEXT值。举个例子,SELECT *查询就不是很好的主张,除非您可以规定作为约束标准的WHERE子句只会找到所急需的数据行。否则,你恐怕并不是目标地在网络上传输大批量的值。那也是 BLOB或TEXT标志符音信囤积在合成的索引列中对我们有着协助的例证。你能够寻找索引列,决定那些须要的多寡行,然后从合格的数据行中检索BLOB或 TEXT值。

④把BLOB或TEXT列分离到独门的表中。在好几意况中,即便把这一个数据列移动到第二张数据表中,能够让你把原数据表中 的数据列调换为定点长度的数额行格式,那么它正是有意义的。这会回退主表中的碎片,使您得到一定长度数据行的习性优势。它还使您在主数据表上运转SELECT *查询的时候不会透过网络传输大批量的BLOB或TEXT值。

  早先使用数据库的时候不是很留神列类型的选项,明天好不轻便一时光小结一下。文章参照他事他说加以考察了MySql5.1参谋手册,《MySql必知必会》等,并无太三个人的资历成分。应接大家补充。

MySQL数据库的varchar类型在5.0.3之下的本子中的最大尺寸节制为255,其数据范围能够是0~255。

1. CHAR

语法:

CHAR (length)

里头length的取值范围为1到255。

 

超过255则报错:

mysql> create table s3 ( value char(1023) primary key);

ERROR 1074 (42000): Column length too big for column 'value' (max = 255); use BLOB or TEXT instead

 

诸如:CHAEscort(20卡塔尔(قطر‎表示最多带有十七个字符的字符串。存款和储蓄时,不足23个字符时前面加空格。

在暗许情状下,提取时,自动删除掉前边的空格;在PAD_CHAR_TO_FULL_LENGTH时,则不会去除前面包车型客车空格,即提取后的结果满含贰13个字符。

 

倘诺存在如下数据:

mysql> show create table s1;

+-------+-----------------------------------------------------------------------------------------------------------------+

| Table | Create Table                                                                                                    |

+-------+-----------------------------------------------------------------------------------------------------------------+

| s1    | CREATE TABLE `s1` (

  `value` char(10) NOT NULL,

  PRIMARY KEY (`value`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1 |

+-------+-----------------------------------------------------------------------------------------------------------------+

1 row in set (0.00 sec)

 

mysql> insert into s1 values ('ABC') ,  ('1234567890') , (' 12 3 45 ');

Query OK, 3 rows affected (0.01 sec)

Records: 3  Duplicates: 0  Warnings: 0

 

 

在暗中认可意况下:

mysql> set sql_mode='';

Query OK, 0 rows affected (0.00 sec)

 

mysql> select length(value) , char_length(value) , value from s1;

+---------------+--------------------+------------+

| length(value) | char_length(value) | value      |

+---------------+--------------------+------------+

|             8 |                  8 |  12 3 45   |

|            10 |                 10 | 1234567890 |

|             3 |                  3 | ABC        |

+---------------+--------------------+------------+

3 rows in set (0.00 sec)

 

 

在sql_mode为PAD_CHAR_TO_FULL_LENGTH时,将不会删除CHAPAJERO类型的字符串前面附加的空格。

mysql> set sql_mode='pad_char_to_full_length';

Query OK, 0 rows affected (0.00 sec)

 

mysql> select length(value) , char_length(value) , value from s1;

+---------------+--------------------+------------+

| length(value) | char_length(value) | value      |

+---------------+--------------------+------------+

|            10 |                 10 |  12 3 45   |

|            10 |                 10 | 1234567890 |

|            10 |                 10 | ABC        |

+---------------+--------------------+------------+

3 rows in set (0.00 sec)

 

mysql> select @sql_mode;

+-----------+

| @sql_mode |

+-----------+

| NULL      |

+-----------+

1 row in set (0.00 sec)

 

mysql> select @@sql_mode;

+-------------------------+

| @@sql_mode              |

+-------------------------+

| PAD_CHAR_TO_FULL_LENGTH |

+-------------------------+

1 row in set (0.00 sec)

 

 

 

 

三、使用建议

1、在钦点数据类型的时候平日是接纳从小原则,举例能用TINY INT的最棒就绝不INT,能用FLOAT类型的就不要DOUBLE类型,那样会对MYSQL在运转作用上巩固比一点都不小,特别是命局据量测量试验条件下。

2、无需把数据表设计的太过复杂,功用模块上分别可能对于前期的维护更为有利,严慎现身大杂烩数据表

3、数据表和字段的起名字也是一门学问

4、设计数据表布局从前请先想象一下是你的屋家,大概结果会尤其合理、高效

5、数据库的末梢设计结果鲜明是成效和可增添性的折中,偏侧任何一方都以不妥的

 

  1. 数值型类型
  2. 日子和时间
  3. 字符串

CHALacrosse BYTE是CHA奥迪Q3 BINA君越Y的外号。那是为了确认保证包容性。

2. VARCHAR

 

语法:

VARCHAR(max-length)

里面,max-length是该项目字符串最多能够积攒的字符的个数。整个字段占用的半空中尺寸是长度占领的字节数加上实际字符所占有的字节数。当字符串长度在0到255时,长度占1个字节,当字符串长度超越2伍15个字符时,长度占2个字节。VARCHA传祺类型最多65533个字符。

 

mysql> create table s13 ( value varchar(10) primary key);

Query OK, 0 rows affected (0.02 sec)

 

mysql> insert into s13 values ('ABCD') , (' A B ');

Query OK, 2 rows affected (0.05 sec)

Records: 2  Duplicates: 0  Warnings: 0

 

mysql> select @@sql_mode;

+-------------------------+

| @@sql_mode              |

+-------------------------+

| PAD_CHAR_TO_FULL_LENGTH |

+-------------------------+

1 row in set (0.00 sec)

 

mysql> select length(value), char_length(value), value from s13;

+---------------+--------------------+-------+

| length(value) | char_length(value) | value |

+---------------+--------------------+-------+

|             5 |                  5 |  A B  |

|             4 |                  4 | ABCD  |

+---------------+--------------------+-------+

2 rows in set (0.00 sec)

 

从上述结果能够见到,PAD_CHAR_TO_FULL_LENGTH形式对于VARCHA福特Explorer类型未有效应,那个形式只对CHAHaval类型有效果与利益。

 

char与varchar

CHAKoleos和VARCHA卡宴类型形似,但它们保存和搜索的法子不一样。它们的最大尺寸和是还是不是尾巴部分空格被封存等方面也分歧。在蕴藏或探究进程中不开展高低写调换。

上边包车型客车表突显了将各个字符串值保存到CHATucson(4State of Qatar和VARCHA福睿斯(4卡塔尔(قطر‎列后的结果,表达了CHA陆风X8和VARCHAEscort之间的歧异:

CHAR(4) 存储需求 VARCHAR(4) 存储需求
'' '    ' 4个字节 '' 1个字节
'ab' 'ab  ' 4个字节 'ab ' 3个字节
'abcd' 'abcd' 4个字节 'abcd' 5个字节
'abcdefgh' 'abcd' 4个字节 'abcd' 5个字节

请留心上表中最终生龙活虎行的值只适用不采用严俊格局时;借使MySQL运转在严峻模式,当先列长度不的值保存**,而且会自然则然错误。

从CHAEvoque(4卡塔尔和VARCHA大切诺基(4卡塔尔(قطر‎列车检查索的值并不总是同样,因为检索时从CHARAV4列删除了尾巴部分的空格。通过上面包车型客车例子表明该间距:
mysql> CREATE TABLE vc (v VARCHAR(4), c CHAR(4));
Query OK, 0 rows affected (0.02 sec)
 
mysql> INSERT INTO vc VALUES ('ab  ', 'ab  ');
Query OK, 1 row affected (0.00 sec)
 
mysql> SELECT CONCAT(v, '+'), CONCAT(c, '+') FROM vc;
+----------------+----------------+
| CONCAT(v, '+') | CONCAT(c, '+') |
+----------------+----------------+
| ab  +          | ab+            |
+----------------+----------------+
1 row in set (0.00 sec)

日子和岁月数据类型

数据类型 说明
DATA 表示1000-01-01~9999-12-31之间的日期,格式为yyyy-mm-dd
TIME 格式为HH:MM:SS
DATATIME DATA和TIME的组合
TIMESTAMP 功能和DATETIME相同,但是范围较小
YEAR 若2位数字表示,范围是1970~2069年。若是用4位表示,范围是1901~2155年。

依附分配给列的字符集核查准绳对CHA宝马X5和VARCHAXC60列中的值举行排序和相比较。

3. 字段长度约束

(1卡塔尔国主键为VARCHACRUISER类型时的长度限定为3074个字符。

mysql> create table s5 ( value varchar(65535) primary key);

ERROR 1071 (42000): Specified key was too long; max key length is 3072 bytes

mysql> create table s5 ( value varchar(3072) primary key);

Query OK, 0 rows affected (0.02 sec)

 

(2卡塔尔国VARCHA宝马X3类型的字段的尺寸当先或等于65536时,自动转接为TEXT相关项目。

缘由便是因为VARCHAGL450类型在存款和储蓄时要保存字符串长度,并且最多占用2个字节。

mysql> create table s6 ( value varchar(3072) primary key , v varchar(65536));

Query OK, 0 rows affected, 1 warning (0.03 sec)

 

mysql> show warnings;

+-------+------+--------------------------------------------+

| Level | Code | Message                                    |

+-------+------+--------------------------------------------+

| Note  | 1246 | Converting column 'v' from VARCHAR to TEXT |

+-------+------+--------------------------------------------+

1 row in set (0.00 sec)

 

mysql> show create table s6;

+-------+----------------------------------------------------------------------------------------------------------------------------------------+

| Table | Create Table                                                                                                                           |

+-------+----------------------------------------------------------------------------------------------------------------------------------------+

| s6    | CREATE TABLE `s6` (

  `value` varchar(3072) NOT NULL,

  `v` mediumtext,

  PRIMARY KEY (`value`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1 |

+-------+----------------------------------------------------------------------------------------------------------------------------------------+

1 row in set (0.00 sec)

 

 

(3卡塔尔国贰个行中的VARCHAENCORE和CHA奥德赛类型的字符串的最大尺寸总和不可能抢先655叁13个字符。

mysql> create table s12 ( value  int  primary key , v varchar(65535));

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

 

mysql> create table s12 ( value  int  primary key , v varchar(65500));

Query OK, 0 rows affected (0.03 sec)

 

 

(4卡塔尔当CHALX570类型的字段插入超过定义长度的多寡时,将机关截取为定义长度。

mysql> show create table s1;

+-------+---------------------------------------------------------------------------------------------------------------+

| Table | Create Table                                                                                                  |

+-------+---------------------------------------------------------------------------------------------------------------+

| s1    | CREATE TABLE `s1` (

  `value` char(10) NOT NULL,

  PRIMARY KEY (`value`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

+-------+---------------------------------------------------------------------------------------------------------------+

1 row in set (0.00 sec)

 

mysql> insert into s1 values ('12345678901234');

Query OK, 1 row affected, 1 warning (0.01 sec)

 

mysql> show warnings;

+---------+------+--------------------------------------------+

| Level   | Code | Message                                    |

+---------+------+--------------------------------------------+

| Warning | 1265 | Data truncated for column 'value' at row 1 |

+---------+------+--------------------------------------------+

1 row in set (0.00 sec)

 

mysql> select * from s1;

+--------------+

| value        |

+--------------+

|              |

| 1234567890   |

| 中           |

+--------------+

3 rows in set (0.00 sec)

 

 

(5卡塔尔当VARCHAHaval类型的字段在插入数据时间长度度超越定义的尺寸,将活动截取到定义的长短。

mysql> insert into s13 values ('12345678901234');

Query OK, 1 row affected, 1 warning (0.01 sec)

 

mysql> show warnings;

+---------+------+--------------------------------------------+

| Level   | Code | Message                                    |

+---------+------+--------------------------------------------+

| Warning | 1265 | Data truncated for column 'value' at row 1 |

+---------+------+--------------------------------------------+

1 row in set (0.00 sec)

 

mysql> select * from s13;

+------------+

| value      |

+------------+

|  A B       |

| 1234567890 |

| ABCD       |

+------------+

3 rows in set (0.00 sec)

 

 

 

 

 

黄金时代、MySQL的数据类型

主要总结以下中国共产党第五次全国代表大会类:

平头类型:BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、 INT、 BIG INT

浮点数类型:FLOAT、DOUBLE、DE明锐L

字符串类型:CHA纳瓦拉、VARCHAEscort、TINY TEXT、TEXT、MEDIUM TEXT、LONGTEXT、TINY BLOB、BLOB、MEDIUM BLOB、LONG BLOB

日期类型:Date、DateTime、TimeStamp、Time、Year

其余数据类型:BINA奥迪Q7Y、VARBINAPAJEROY、ENUM、SET、Geometry、Point、MultiPoint、LineString、MultiLineString、Polygon、GeometryCollection等

 

1、整型

MySQL数据类型 含义(有符号)
tinyint(m) 1个字节  范围(-128~127)
smallint(m) 2个字节  范围(-32768~32767)
mediumint(m) 3个字节  范围(-8388608~8388607)
int(m) 4个字节  范围(-2147483648~2147483647)
bigint(m) 8个字节  范围(+-9.22*10的18次方)

取值范围如果加了unsigned,则最大值翻倍,如tinyint unsigned的取值范围为(0~256)。

 int(mState of Qatar里的m是表示SELECT查询结果聚集的来得升幅,并不影响其实的取值范围,未有影响到突显的升幅,不理解那么些m有啥用。

 

2、浮点型(float和double)

MySQL数据类型 含义
float(m,d) 单精度浮点型    8位精度(4字节)     m总个数,d小数位
double(m,d) 双精度浮点型    16位精度(8字节)    m总个数,d小数位

设一个字段定义为float(6,3卡塔尔,借使插入三个数123.45678,实际数据Curry存的是123.457,但总个数还以实际为准,即6位。整数部分最大是3位,借使插入数12.123456,存款和储蓄的是12.1234,如若插入12.12,存款和储蓄的是12.1200.

 

3、定点数

浮点型在数据库中贮存的是相通值,而定点类型在数据库中贮存的是准确值。 

decimal(m,d卡塔尔国 参数m<65 是总个数,d<30且 d<m 是小数位。

 

4、字符串(char,varchar,_text)

MySQL数据类型 含义
char(n) 固定长度,最多255个字符
varchar(n) 固定长度,最多65535个字符
tinytext 可变长度,最多255个字符
text 可变长度,最多65535个字符
mediumtext 可变长度,最多2的24次方-1个字符
longtext 可变长度,最多2的32次方-1个字符

char和varchar:

1.char(n)若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以char类型存储的字符串末尾不可能有空格,varchar不幸免此。 

2.char(n卡塔尔(قطر‎恒定长度,char(4卡塔尔(قطر‎不管是存入多少个字符,都将占用4个字节,varchar是存入的骨子里字符数+1个字节(n<=255)或2个字节(n>255卡塔尔(قطر‎,

从而varchar(4卡塔尔,存入3个字符将占用4个字节。 

3.char类型的字符串检索速度要比varchar类型的快。
varchar和text: 

1.varchar可钦命n,text不能够钦命,内部存款和储蓄varchar是存入的莫过于字符数+1个字节(n<=255)或2个字节(n>255卡塔尔国,text是实际上字符数+2个字

节。 

2.text类型不能够有暗许值。 

3.varchar可径直开立索引,text创制索引要内定前有个别个字符。varchar查询速度快于text,在都成立索引的图景下,text的目录好似不起功能。

 

5.二进制数据(_Blob)

1._BLOB和_text存款和储蓄形式差异,_TEXT以文件情势存储,罗马尼亚语存款和储蓄区分轻重缓急写,而_Blob是以二进制情势存款和储蓄,不分大小写。

2._BLOB存储的数码只好完全读出。 

3._TEXT能够钦定字符集,_BLO不用钦命字符集。

 

6.日期时间项目

MySQL数据类型 含义
date 日期 '2008-12-2'
time 时间 '12:25:36'
datetime 日期时间 '2008-12-2 22:06:44'
timestamp 自动存储记录修改时间

若定义二个字段为timestamp,那么些字段里的时刻数额会随别的字段改良的时候自动刷新,所以那么些数据类型的字段能够寄放那条记下最终被涂改的时光。

 

数据类型的品质

 

MySQL关键字 含义
NULL 数据列可包含NULL值
NOT NULL 数据列不允许包含NULL值
DEFAULT 默认值
PRIMARY KEY 主键
AUTO_INCREMENT 自动递增,适用于整数类型
UNSIGNED 无符号
CHARACTER SET name 指定一个字符集

 

字符串类型

  有二种基本的串类型,分别为定长串,变长串。CHAEnclave归于顶长性,VARCHAQashqai、BLOB和TEXT类是变长类型。各类项指标储存须求在于列值的实在尺寸(用前边的表中的L表示卡塔尔国,并不是该项指标最大大概的轻重缓急。举个例子,VARCHA讴歌RDX(10卡塔尔国列能够宽容最大尺寸为10的字符串。实际存款和储蓄需要是字符串(L卡塔尔的长短,加上二个记录字符串长度的字节。对于字符串'abcd',L是4,存款和储蓄必要5个字节。关于字符串类型的详尽表明请看:上面重点比较VARCHAEscort和CHATucson。

CHAR: 选择长度固定的字符串,长度在创造表时钦点。char不允好多于内定的字符数目,分配的半空四之日点名的均等多。

VARCHA: 独有钦点的数额得到保留(额外的多少不保留)。varchar能够钦点最大尺寸。 

双面分别:

  1. 储存长度不一致。
  2. 管理char的进度比varchar快得多。
  3. MySql分裂意对varchar进行索引。
  4. char的尾巴部分空格不保留,就是截断。
  5. 同CHACRUISER比较,VARCHAXC90值保存时只保留需求的字符数,另加多少个字节来记录长度(假设列注明的长度超越255,则运用五个字节卡塔尔。

 

CHAR(4)

存储需求

VARCHAR(4)

存储需求

''

'    '

4个字节

''

1个字节

'ab'

'ab  '

4个字节

'ab '

3个字节

'abcd'

'abcd'

4个字节

'abcd'

5个字节

'abcdefgh'

'abcd'

4个字节

'abcd'

5个字节

 

  上边有三个例子,能够注明尾巴部分阶段的难题:
mysql> create table vc (v varchar(4),c char(4));

mysql> insert into vc values ('ab ','ab ');

mysql> select concat(v,'+'),concat(c,'+') from vc;
+---------------+---------------+
| concat(v,'+')   | concat(c,'+')    |
+---------------+---------------+
| ab +               | ab+ |
+---------------+---------------+

MySQL数据库的varchar类型在5.0.3之下的本子中的最大尺寸限定为255,其数额范围能够是0~255。 在MySQL5.0.3及以上的版本中,varchar数...

4. 字符集

暗中认可境况下,数据表的字符集为latin1。可以在create table可能alter table时改进数据表的字符集为utf8。

 

mysql> show variables like '%character%';

+--------------------------+----------------------------+

| Variable_name            | Value                      |

+--------------------------+----------------------------+

| character_set_client     | utf8                       |

| character_set_connection | utf8                       |

| character_set_database   | latin1                     |

| character_set_filesystem | binary                     |

| character_set_results    | utf8                       |

| character_set_server     | latin1                     |

| character_set_system     | utf8                       |

| character_sets_dir       | /usr/share/mysql/charsets/ |

+--------------------------+----------------------------+

8 rows in set (0.01 sec)

 

mysql> show create table s1;

+-------+---------------------------------------------------------------------------------------------------------------+

| Table | Create Table                                                                                                  |

+-------+---------------------------------------------------------------------------------------------------------------+

| s1    | CREATE TABLE `s1` (

  `value` char(10) NOT NULL,

  PRIMARY KEY (`value`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

+-------+---------------------------------------------------------------------------------------------------------------+

1 row in set (0.00 sec)

 

 

mysql> select length(value) , char_length(value) , value from s1;

+---------------+--------------------+-------+

| length(value) | char_length(value) | value |

+---------------+--------------------+-------+

|             3 |                  1 | 中    |

+---------------+--------------------+-------+

1 row in set (0.00 sec)

 

LENGTH表示字节数,CHAPRADO_LENGTH代表字符数。在行使UTF8字符集时,叁个汉字的字节数为3,即LENGTH为3,;而叁当中中原人民共和国字的字符数仍是1,即CHA本田UR-V_LENGTH仍然为1。

 

二、MYSQL数据类型的尺寸和限定

各数据类型及字节长度一览表:

数据类型 字节长度 范围或用法
Bit 1 无符号[0,255],有符号[-128,127],天缘博客备注:BIT和BOOL布尔型都占用1字节
TinyInt 1 整数[0,255]
SmallInt 2 无符号[0,65535],有符号[-32768,32767]
MediumInt 3 无符号[0,2^24-1],有符号[-2^23,2^23-1]]
Int 4 无符号[0,2^32-1],有符号[-2^31,2^31-1]
BigInt 8 无符号[0,2^64-1],有符号[-2^63 ,2^63 -1]
Float(M,D) 4 单精度浮点数。天缘博客提醒这里的D是精度,如果D<=24则为默认的FLOAT,如果D>24则会自动被转换为DOUBLE型。
Double(M,D) 8  双精度浮点。
Decimal(M,D) M+1或M+2 未打包的浮点数,用法类似于FLOAT和DOUBLE,天缘博客提醒您如果在ASP中使用到Decimal数据类型,直接从数据库读出来的Decimal可能需要先转换成Float或Double类型后再进行运算。
Date 3 以YYYY-MM-DD的格式显示,比如:2009-07-19
Date Time 8 以YYYY-MM-DD HH:MM:SS的格式显示,比如:2009-07-19 11:22:30
TimeStamp 4 以YYYY-MM-DD的格式显示,比如:2009-07-19
Time 3 以HH:MM:SS的格式显示。比如:11:22:30
Year 1 以YYYY的格式显示。比如:2009
Char(M) M
定长字符串。
VarChar(M) M 变长字符串,要求M<=255
Binary(M) M 类似Char的二进制存储,特点是插入定长不足补0
VarBinary(M) M 类似VarChar的变长二进制存储,特点是定长不补0
Tiny Text Max:255 大小写不敏感
Text Max:64K 大小写不敏感
Medium Text Max:16M 大小写不敏感
Long Text Max:4G 大小写不敏感
TinyBlob Max:255 大小写敏感
Blob Max:64K 大小写敏感
MediumBlob Max:16M 大小写敏感
LongBlob Max:4G 大小写敏感
Enum 1或2 最大可达65535个不同的枚举值
Set 可达8 最大可达64个不同的值
Geometry    
Point    
LineString    
Polygon    
MultiPoint    
MultiLineString    
MultiPolygon    
GeometryCollection    

数值型类型

  MySql援助各类数值数据类型,有两样的取值范围。当中绝大比比较多的数值数据类型都足以有标记可能无符号(BIT无符号),私下认可的是有号子。数值型类型包含严厉数值数据类型(INTEGE瑞虎、SMALLINT、DESylphyL和NUMETiguanIC卡塔尔国,甚至相仿数值数据类型(FLOAT、REAL和DOUBLE PRECISION卡塔尔(قطر‎。作为SQL标准的扩展,MySQL也帮忙整数品种TINYINT、MEDIUMINT和BIGINT。上边包车型客车表呈现了急需的种种整数类型的积累和限定。对于浮点列类型,在MySQL中单精度值使用4个字节,双精度值使用8个字节。

  DECIMAL和NUMERIC类型在MySQL中正是等同的类型。它们用于保存必得为方便精度的值,举例货币数据。当注解该品种的列时,可以(并且普通要卡塔尔钦点精度和标度;举个例子:salary DECIVICL(5,2卡塔尔(قطر‎

  FLOAT类型和DOUBLE类型用以表示相符数值数据类型。

  有关浮点数和定点数须求小心的

  1. 浮点数存在抽样误差。
  2. 对货币等精度敏感的数据,应该用确定地点数表示和存款和储蓄。
  3. 编制程序中,尽量防止浮点数的可比。
  4. 在意浮点数中特殊值的管理。

 

mysql> CREATE TABLE vc (v VARCHAR(4), c CHAR(4));
Query OK, 0 rows affected (0.02 sec)

7. TEXT

有种种TEXT相关品种,它们之间的出入在于允许的最大尺寸不平等。

TINYTEXT:1到253个字节。字段长度前缀1个字节。

 TEXT:256到655三十四个字节。字段长度前缀2个字节。

 MEDIUMTEXT:65536到2的20回方-1个字节。字段长度前缀3个字节。

LONGTEXT:2的二十回方到2的二19回方-1个字节。字段长度前缀4个字节。

 

在创制数量表时,在CREATE TABLE语句中只行使TEXT类型就能够,MySQL将基于TEXT(N卡塔尔(قطر‎中的N自动决定其实使用TINYTEXT或TEXT或MEDIUMTEXT或LONGTEXT。在采纳任何多个体系时则没有这种基于长度自动决定实际上类型的功效,何况不能钦点最大尺寸。

 

mysql> create table b3 ( value int primary key , v text(30) );

Query OK, 0 rows affected (0.04 sec)

 

mysql> show create table b3;

+-------+--------------------------------------------------------------------------------------------------------------------------------+

| Table | Create Table                                                                                                                   |

+-------+--------------------------------------------------------------------------------------------------------------------------------+

| b3    | CREATE TABLE `b3` (

  `value` int(11) NOT NULL,

  `v` tinytext,

  PRIMARY KEY (`value`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1 |

+-------+--------------------------------------------------------------------------------------------------------------------------------+

1 row in set (0.00 sec)

 

mysql> create table b4 ( value int primary key , v text(65536) );

Query OK, 0 rows affected (0.02 sec)

 

mysql> show create table b4;

+-------+----------------------------------------------------------------------------------------------------------------------------------+

| Table | Create Table                                                                                                                     |

+-------+----------------------------------------------------------------------------------------------------------------------------------+

| b4    | CREATE TABLE `b4` (

  `value` int(11) NOT NULL,

  `v` mediumtext,

  PRIMARY KEY (`value`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1 |

+-------+----------------------------------------------------------------------------------------------------------------------------------+

1 row in set (0.00 sec)

 

mysql> create table b5 ( value int primary key , v text(300) );

Query OK, 0 rows affected (0.02 sec)

 

mysql> show create table b5;

+-------+----------------------------------------------------------------------------------------------------------------------------+

| Table | Create Table                                                                                                               |

+-------+----------------------------------------------------------------------------------------------------------------------------+

| b5    | CREATE TABLE `b5` (

  `value` int(11) NOT NULL,

  `v` text,

  PRIMARY KEY (`value`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1 |

+-------+----------------------------------------------------------------------------------------------------------------------------+

1 row in set (0.01 sec)

 

TEXT类型和VARCHA奥德赛类型肖似,并不交易会开长度补足的操作。

 

筛选数据类型的宗旨准则

前提:使用切合积攒引擎。

筛选规范:依据选定的仓库储存引擎,分明怎么样选用合适的数据类型。

上边包车型大巴选用形式按存款和储蓄引擎分类:

  • MyISAM 数据存款和储蓄引擎和数据列:MyISAM数据表,最佳使用一定长度(CHA福睿斯State of Qatar的数据列代替可变长度(VARCHAWrangler卡塔尔国的数据列。
  • MEMOEnclaveY存款和储蓄引擎和数据列:MEMOENCOREY数据表近期都施用固定长度的多寡行存款和储蓄,因而无论是采纳CHA哈弗或VARCHARAV4列都并未有涉及。两个都以当作CHA本田CR-V类型处理的。
  • InnoDB 存款和储蓄引擎和数据列:提议选拔 VARCHAPAJERO类型。

对于InnoDB数据表,内部的行存款和储蓄格式没有分别固定长度和可变长度列(全部数据行都使用指向数据列值的头指针),因此在真相上,使用固定长度的CHASportage列不必然比选取可变长度VARCHA奇骏列简单。由此,主要的习性因素是数据行使用的囤积总的数量。由于CHA奥迪Q7平均占用的长空多于VARCHA奔驰G级,由此使用VARCHAPAJERO来最小化须求管理的数据行的蕴藏总的数量和磁盘I/O是相比好的。

上面说一下稳住长度数据列与可变长度的数据列。

CHA昂Cora列的长短固定为创造表时表明的长度。长度可感觉从0到255的此外值。当保存CHAENVISION值时,在它们的左边手填充空格以高达钦命的长度。当检索到CHAHaval值时,尾巴部分的空格被删去掉。在蕴藏或研究进度中不进行高低写转变。

6. VARBINARY

VARBINAPRADOY与BINAHighlanderY相仿,二者之间差距与 VARCHAENVISION和CHA奥迪Q5之间的反差相同。而VARBINARY和VARCHAKoleos也很周边,二者之间的差异与BINA本田UR-VY和CHA卡宴之间的差异雷同。

当最大尺寸为0到255字节时,长度前缀为1个字节,字段总参谋长度为1+最大尺寸个字节。

当最大尺寸为256到65535字节时,长度前缀为2个字节。

 

mysql> create table b2 ( value varbinary(10) primary key);

Query OK, 0 rows affected (0.03 sec)

 

mysql> insert into b2 values ( '1234567890'), ("123"), (unhex('01020300010203'));

Query OK, 3 rows affected (0.01 sec)

Records: 3  Duplicates: 0  Warnings: 0

 

mysql> select value, hex(value) from b2;

+------------+----------------------+

| value      | hex(value)           |

+------------+----------------------+

|      | 01020300010203       |

| 123        | 313233               |

| 1234567890 | 31323334353637383930 |

+------------+----------------------+

3 rows in set (0.00 sec)

 

 

当VARBINA中华VY类型超越65535字节时,将自动调换为BLOB相关项目。

mysql> create table b9 ( value int  primary key, v varbinary(65536));

Query OK, 0 rows affected, 1 warning (0.02 sec)

 

mysql> show warnings;

+-------+------+----------------------------------------------+

| Level | Code | Message                                      |

+-------+------+----------------------------------------------+

| Note  | 1246 | Converting column 'v' from VARBINARY to BLOB |

+-------+------+----------------------------------------------+

1 row in set (0.00 sec)

 

mysql> show create table b9;

+-------+----------------------------------------------------------------------------------------------------------------------------------+

| Table | Create Table                                                                                                                     |

+-------+----------------------------------------------------------------------------------------------------------------------------------+

| b9    | CREATE TABLE `b9` (

  `value` int(11) NOT NULL,

  `v` mediumblob,

  PRIMARY KEY (`value`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1 |

+-------+----------------------------------------------------------------------------------------------------------------------------------+

1 row in set (0.00 sec)

 

 

对此尾巴部分填充字符被裁剪掉或比较时将它们忽略掉的动静,要是列的目录必要唯大器晚成的值,在列内插入一个只是填充字符数区别的值将会造成复制键值错误。

MySQL底子知识01数据类型(大器晚成卡塔尔(قطر‎字符串相关品种,mysql数据类型

上一篇:没有了 下一篇:没有了

Copyright © 2015-2019 http://www.carrefourstation.com. 澳门新莆京手机网站-新蒲京娱乐场有限公司 版权所有