Chinaunix首页 | 论坛 | 博客
  • 博客访问: 350611
  • 博文数量: 166
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1640
  • 用 户 组: 普通用户
  • 注册时间: 2015-05-05 11:44
个人简介

文章不在长,坚持不懈记录下努力前行的脚步

文章分类

全部博文(166)

文章存档

2017年(19)

2016年(59)

2015年(88)

我的朋友

分类: Mysql/postgreSQL

2017-01-06 16:27:33

11.4.1 The CHAR and VARCHAR Types
char和varchar这两种数据类型很相似,但是他们在数据的存取上都存在着一定的差异,这种差异主要是存取数据的最大长度及是否存在空格填充的问题。

char和varchar指定的长度表示你想最多存储多少个字符,比如,char(30)表示你能存30个字符
char列的长度在你建表的时候就确定了,长度可设置范围是0到255,存储char列的值的时候,他会采用空格右填充的方式补齐最大长度,如果没有启用PAD_CHAR_TO_FULL_LENGTH参数的话,查询的时候这些空白字符会被截掉。

补:PAD_CHAR_TO_FULL_LENGTH参数
=======================================
默认情况下,检索char列值得时候填充的空格会被截取掉,但是如果启用PAD_CHAR_TO_FULL_LENGTH参数的话,该列的值会已完整长度的形式输出不会被截断掉,但是这个设置对varchar列并没有影响,空格会被原样输出。
CREATE TABLE t1 (c1 CHAR(10),c2 VARCHAR(10));
INSERT INTO t1 (c1,c2) VALUES('xy','xy');
SET sql_mode = '';
SELECT c1, CHAR_LENGTH(c1),c2,CHAR_LENGTH(c2) FROM t1;
c1      CHAR_LENGTH(c1)  c2      CHAR_LENGTH(c2)  
------  ---------------  ------  -----------------
xy                    2  xy                      2

SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';
SELECT c1, CHAR_LENGTH(c1),c2,CHAR_LENGTH(c2) FROM t1;
c1          CHAR_LENGTH(c1)  c2      CHAR_LENGTH(c2)  
----------  ---------------  ------  -----------------
xy                       10  xy                      2
=======================================

varchar列的值得长度是可变的,范围可以从0到65535,但是这个值受行的最大长度和列上所使用的字符集的限制(65535字节,行的最大允许长度)。 http://dev.mysql.com/doc/refman/5.6/en/column-count-limit.html

与char不同的是,varchar类型存储值的时候带有一个1到2个字节的前缀,前缀的长度跟存储值得长度相关,如果不超过255个字节,那么就加一个字节,如果超过255个字节,就加两个字节。

如果你没有启用严格的SQL模式,而你插入的值超过列的最大长度值,那么插入的数据会被截断掉并发出一个警告,但是如果启用了严格SQL mode,当被截断的字符为非空字符的时候,给你返回的是一个错误阻止你插入改值。

对于varchar字段,不管用的是不是严格的sql mode,如果填充空格后长度超过了列本身能存储的长度,那么在数据插入之前会被截断掉,
并发出一个警告,





阅读(633) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~