⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 06-2.html

📁 MySQL4.1.0 中文参考手册
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<A NAME="IDX1044"></A>
<DT><CODE>YEAR[(2|4)]</CODE>
<DD>
一个 2 或 4 位数字格式的年(缺省为 4 位)。允许的值是 <CODE>1901</CODE> 到 <CODE>2155</CODE>、<CODE>0000</CODE>(4 位年格式) 以及使用 2 位格式的 1970-2069 (70-69)。MySQL 以 <CODE>YYYY</CODE> 格式显示 <CODE>YEAR</CODE> 值,但是允许你使用字符串或数字来给 <CODE>YEAR</CODE> 列赋值。(<CODE>YEAR</CODE> 类型在 MySQL 3.22 之前不支持。) 查看章节 <A HREF="06-2.html#YEAR">6.2.2.4  <CODE>YEAR</CODE> 类型</A>。

<A NAME="IDX1045"></A>
<A NAME="IDX1046"></A>
<A NAME="IDX1047"></A>
<A NAME="IDX1048"></A>
<DT><CODE>[NATIONAL] CHAR(M) [BINARY]</CODE>
<DD>
一个定长的字符串,当存储时,总是以空格填满右边到指定的长度。<CODE>M</CODE> 的范围是 0 到 255 (在 MySQL 3.23 版本之前为 1 到 255)。当该值被检索时,尾部空格将被删除。<CODE>CHAR</CODE> 值根据缺省的字符集进行忽略大小写的排索与比较,除非指定了关键词 <CODE>BINARY</CODE>。

<CODE>NATIONAL CHAR</CODE> (或短形式 <CODE>NCHAR</CODE>) 是以 ANSI SQL 方式定义一个 <CODE>CHAR</CODE> 列,它将使用缺省的字符集。这在 MySQL 中是默认的。

<CODE>CHAR</CODE> 是 <CODE>CHARACTER</CODE> 的缩写。

MySQL 允许以 <CODE>CHAR(0)</CODE> 类型建立一个列。一些老程序运行时必需一个列,却又并不使用这个列的值,你就不得不为了适应它而建立该列,在这情况下,<CODE>CHAR(0)</CODE> 将是很有益的。当需要一个列仅保存两个值时:一个为 <CODE>CHAR(0)</CODE>(该列没有定义为 <CODE>NOT NULL</CODE>),这将仅占用一个比特位来存储 2 个值:<CODE>NULL</CODE> 或 <CODE>""</CODE>。查看章节 <A HREF="06-2.html#CHAR">6.2.3.1  <CODE>CHAR</CODE> 和 <CODE>VARCHAR</CODE> 类型</A>。

<DT><CODE>CHAR</CODE>
<DD>
这是 <CODE>CHAR(1)</CODE> 的同义词。

<A NAME="IDX1049"></A>
<A NAME="IDX1050"></A>
<A NAME="IDX1051"></A>
<DT><CODE>[NATIONAL] VARCHAR(M) [BINARY]</CODE>
<DD>
一个变长的字符串。<STRONG>注意:</STRONG>尾部的空格在存储时将会被删除(这与 ANSI SQL 约规不同)。<CODE>M</CODE> 的范围是 0 到 255 (在 MySQL 4.0.2 之前的版本中是 1 到 255)。
<CODE>VARCHAR</CODE> 值以大小写忽略方式进行排索与比较,除非关键词 <CODE>BINARY</CODE> 被指定。查看章节 <A HREF="06-5.html#Silent_column_changes">6.5.3.1  隐式的列定义变化</A>。

<CODE>VARCHAR</CODE> 是 <CODE>CHARACTER VARYING</CODE> 的缩写。
查看章节 <A HREF="06-2.html#CHAR">6.2.3.1  <CODE>CHAR</CODE> 和 <CODE>VARCHAR</CODE> 类型</A>。

<A NAME="IDX1052"></A>
<A NAME="IDX1053"></A>
<DT><CODE>TINYBLOB</CODE>
<DD>
<DT><CODE>TINYTEXT</CODE>
<DD>
一个 <CODE>BLOB</CODE> 或 <CODE>TEXT</CODE> 列,最大长度为 255 (2^8 - 1) 个字符。查看章节 <A HREF="06-5.html#Silent_column_changes">6.5.3.1  隐式的列定义变化</A>。查看章节 <A HREF="06-2.html#BLOB">6.2.3.2   <CODE>BLOB</CODE> 和 <CODE>TEXT</CODE> 类型</A>。

<A NAME="IDX1054"></A>
<A NAME="IDX1055"></A>
<DT><CODE>BLOB</CODE>
<DD>
<DT><CODE>TEXT</CODE>
<DD>
一个 <CODE>BLOB</CODE> 或 <CODE>TEXT</CODE> 列,最大长度为 65535 (2^16 - 1) 个字符。查看章节 <A HREF="06-5.html#Silent_column_changes">6.5.3.1  隐式的列定义变化</A>。查看章节 <A HREF="06-2.html#BLOB">6.2.3.2   <CODE>BLOB</CODE> 和 <CODE>TEXT</CODE> 类型</A>。

<A NAME="IDX1056"></A>
<A NAME="IDX1057"></A>
<DT><CODE>MEDIUMBLOB</CODE>
<DD>
<DT><CODE>MEDIUMTEXT</CODE>
<DD>
一个 <CODE>BLOB</CODE> 或 <CODE>TEXT</CODE> 列,最大长度为 16777215 (2^24 - 1) 个字符。查看章节 <A HREF="06-5.html#Silent_column_changes">6.5.3.1  隐式的列定义变化</A>。查看章节 <A HREF="06-2.html#BLOB">6.2.3.2   <CODE>BLOB</CODE> 和 <CODE>TEXT</CODE> 类型</A>。

<A NAME="IDX1058"></A>
<A NAME="IDX1059"></A>
<DT><CODE>LONGBLOB</CODE>
<DD>
<DT><CODE>LONGTEXT</CODE>
<DD>
一个 <CODE>BLOB</CODE> 或 <CODE>TEXT</CODE> 列,最大长度为 4294967295 (2^32 - 1) 个字符。查看章节 <A HREF="06-5.html#Silent_column_changes">6.5.3.1  隐式的列定义变化</A>。注意,由于服务器/客户端的协议以及 MyISAM 表通常有一个 16M 每通信包/表行的限制,你仍然不能使用这个类型的整个范围。查看章节 <A HREF="06-2.html#BLOB">6.2.3.2   <CODE>BLOB</CODE> 和 <CODE>TEXT</CODE> 类型</A>。

<A NAME="IDX1060"></A>
<DT><CODE>ENUM('value1','value2',...)</CODE>
<DD>
一个枚举类型。一个仅能有一个值的字符串对象,这个值选自值列 <CODE>'value1'</CODE>、<CODE>'value2'</CODE>、<CODE>...</CODE>、<CODE>NULL</CODE> 或特殊的 <CODE>""</CODE> 出错值。一个 <CODE>ENUM</CODE> 列可以有最大 65535 不同的值。查看章节 <A HREF="06-2.html#ENUM">6.2.3.3  <CODE>ENUM</CODE> 类型</A>。

<A NAME="IDX1061"></A>
<DT><CODE>SET('value1','value2',...)</CODE>
<DD>
一个集合。一个能有零个或更多个值的字符串对象,其中每个值必须选自值列<CODE>'value1'</CODE>、<CODE>'value2'</CODE>、<CODE>...</CODE>。一个 <CODE>SET</CODE> 列可以有最大 64 个成员。查看章节 <A HREF="06-2.html#SET">6.2.3.4  <CODE>SET</CODE> 类型</A>。
</DL>



<H3><A NAME="Numeric_types"></A>6.2.1  数字类型</H3>

<P>
MySQL 支持所有的 ANSI/ISO SQL92 数字类型。这些类型包括准确数字的数据类型(<CODE>NUMERIC</CODE>、<CODE>DECIMAL</CODE>、<CODE>INTEGER</CODE> 和 <CODE>SMALLINT</CODE>),也包括近似数字的数据类型(<CODE>FLOAT</CODE>、<CODE>REAL</CODE>和 <CODE>DOUBLE PRECISION</CODE>)。关键词 <CODE>INT</CODE> 是 <CODE>INTEGER</CODE> 的同义词,关键词 <CODE>DEC</CODE> 是 <CODE>DECIMAL</CODE> 的同义词。
</P>

<P>
<CODE>NUMERIC</CODE> 和 <CODE>DECIMAL</CODE> 类型被 MySQL 以同样的类型实现,这在 SQL92 标准中是允许的。他们用于保存对准确精度有重要要求的值,例如与金钱有关的数据。当以它们中的之一声明一个列时,精度和数值范围可以(通常是)被指定;例如:
</P>

<PRE>
    salary DECIMAL(5,2)
</PRE>

<P>
在这个例子中,<CODE>5</CODE> (<CODE>精度(precision)</CODE>) 代表重要的十进制数字的数目,<CODE>2</CODE> (<CODE>数据范围(scale)</CODE>) 代表在小数点后的数字位数。在这种情况下,因此,<CODE>salary</CODE> 列可以存储的值范围是从 <CODE>-99.99</CODE> 到 <CODE>99.99</CODE>。(实际上 MySQL 在这个列中可以存储的数值可以一直到 <CODE>999.99</CODE>,因为它没有存储正数的符号)。
</p>
<p><tt>译者注:</tt>
<PRE>
M 与D 对DECIMAL(M, D) 取值范围的影响

类型说明          取值范围(MySQL < 3.23)     取值范围(MySQL >= 3.23)
DECIMAL(4, 1)        -9.9 到 99.9                  -999.9 到 9999.9
DECIMAL(5, 1)       -99.9 到 999.9                -9999.9 到 99999.9
DECIMAL(6, 1)      -999.9 到 9999.9              -99999.9 到 999999.9
DECIMAL(6, 2)      -99.99 到 999.99              -9999.99 到 99999.99
DECIMAL(6, 3)      -9.999 到 99.999              -999.999 到 9999.999

# 在MySQL 3.23 及以后的版本中,DECIMAL(M, D) 的取值范围等于早期版本中的DECIMAL(M + 2, D) 的取值范围。
</PRE>
<tt>注释结束:</tt>
<p></P>

<P>
在 ANSI/ISO SQL92 中,句法 <CODE>DECIMAL(p)</CODE> 等价于 <CODE>DECIMAL(p,0)</CODE>。同样的,在执行被允许决定值 <CODE>p</CODE> 的地方,句法 <CODE>DECIMAL</CODE> 等价于 <CODE>DECIMAL(p,0)</CODE>。MySQL 目前还不支持 <CODE>DECIMAL</CODE>/<CODE>NUMERIC</CODE> 数据类型的这些变体形式中的任一种。一般来说这并不是一个严重的问题,通过明确地控制精度和数值范围可以得到这些类型的主要功能益处。
</P>

<P>
<CODE>DECIMAL</CODE> 和 <CODE>NUMERIC</CODE> 值是作为字符串存储的,而不是作为二进制浮点数,以便保护这些值的十进制精确度。一个字符用于数值的每一位、小数点(如果 <CODE>scale</CODE> &#62; 0) 和 <SAMP>“-”</SAMP> 符号(对于负值)。如果 <CODE>scale</CODE> 是 0,<CODE>DECIMAL</CODE> 和 <CODE>NUMERIC</CODE> 值不包含小数点或小数部分。
</P>

<P>
<CODE>DECIMAL</CODE> 和 <CODE>NUMERIC</CODE> 值的最大范围与 <CODE>DOUBLE</CODE> 一致,但是对于一个给定的 <CODE>DECIMAL</CODE> 或 <CODE>NUMERIC</CODE> 列,它的实际范围可制定该列时的 <CODE>precision</CODE> 或 <CODE>scale</CODE> 限制。当这样的列被赋给了小数点的位数超过 <CODE>scale</CODE> 所指定的值时,该将根据 <CODE>scale</CODE> 进行四舍五入。当一个 <CODE>DECIMAL</CODE> 或 <CODE>NUMERIC</CODE> 列被赋与一个大小超过指定(或缺省)的 <CODE>precision</CODE> and <CODE>scale</CODE> 的限止范围时,MySQL 以该列范围的端点值存储该值。
</P>

<tt>示例(译者注):</tt>
<PRE>
mysql&#62; CREATE TABLE `tA` (
    -&#62;   `id` int(4) unsigned zerofill NOT NULL,
    -&#62;   `salary` decimal(5,2),
    -&#62;   PRIMARY KEY  (`id`)
    -&#62; ) TYPE=MyISAM;
Query OK, 0 rows affected (0.00 sec)

mysql&#62; INSERT INTO `tA` (`id`, `salary`)
    -&#62;  VALUES (1, -99.99),     # 以数字方式插入
    -&#62;         (2, "99.99"),    # 以字符串方式插入
    -&#62;         (3, -999.99), 
    -&#62;         (4, "9999.99"),
    -&#62;         (5, -1000.00),   # decimal(5,2)最小范围为 -999.99 该值插入时结果为 -999.99
    -&#62;         (6, "10000.00"), # decimal(5,2)最大范围为 9999.99 该值插入时结果为 9999.99
    -&#62;         (7, "-99.999"),  # 小数位数超过 scale 指定值,但因以字符串方式插入,结果值仅截去多余部分
    -&#62;         (8, "99.9999"),
    -&#62;         (9, -99.999),    # 小数位数超过 scale 指定值,对该值进行四舍五入,结果为 -100.00
    -&#62;         (10,99.9999);
Query OK, 10 rows affected (0.00 sec)
Records: 10  Duplicates: 0  Warnings: 4

mysql&#62; SELECT * FROM `tA`;
+------+---------+
| id   | salary  |
+------+---------+
| 0001 |  -99.99 |
| 0002 |   99.99 |
| 0003 | -999.99 |
| 0004 | 9999.99 |
| 0005 | -999.99 |
| 0006 | 9999.99 |
| 0007 |  -99.99 |
| 0008 |   99.99 |
| 0009 | -100.00 |
| 0010 |  100.00 |
+------+---------+
10 rows in set (0.00 sec)

* 以上结果在 MySQL 4.0.12 中测试
</PRE>
<tt>示例结束(译者注)</tt>
<P>
作为对 ANSI/ISO SQL92 标准的一个扩展,MySQL 也支持上面的表格所列出的整型类型 <CODE>TINYINT</CODE>、<CODE>MEDIUMINT</CODE> 和 <CODE>BIGINT</CODE>。另外一个扩展是 MySQL 支持随意指定一个整型数值的显示格式,这通过在类型的基本关键词后跟一个括号来实现(例如 <CODE>INT(4)</CODE>)。这个可选的宽度规格说明是用于在数值显示时,对某些值的宽度短于该列宽度的值进行左填补显示的,而不是为了限制在该列中存储值的宽度,也不是为了限制那些超过该列指定宽度的值的可被显示的数字位数。当与可选的扩展属性 <CODE>ZEROFILL</CODE> 一起使用时,缺省填补用的空格被零代替。举例来说,一个列被定义为 <CODE>INT(5) ZEROFILL</CODE>,插入的值 <CODE>4</CODE> 被检索出来时为 <CODE>00004</CODE>。注意,如果在一个整型列中存储一个超过显示宽度的更大值时,当 MySQL 为某些复杂的联结(join)生成临时表时,你可能会遇到问题,因为在这种情况下,MySQL 信任地认为所有的值均适合原始的列宽度。
</P>
<tt>示例(译者注):</tt>
<PRE>
mysql&#62; CREATE TABLE `tA` (
    -&#62;   `id` int(4) unsigned zerofill NOT NULL,
    -&#62;     PRIMARY KEY  (`id`)
    -&#62; ) TYPE=MyISAM;
Query OK, 0 rows affected (0.00 sec)

mysql&#62; INSERT INTO `tA` (`id`)
    -&#62;  VALUES (1),(12),(1234),(12345678);
Query OK, 4 rows affected (0.01 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql&#62; SELECT * FROM `tA`;
+----------+
| id       |
+----------+
|     0001 |
|     0012 |
|     1234 |
| 12345678 |
+----------+
4 rows in set (0.00 sec)

* 以上结果在 MySQL 4.0.12 中测试
</PRE>
<tt>示例结束(译者注)</tt>
<P>
所有的整型类型可以有一个可选(非标准的)属性 <CODE>UNSIGNED</CODE>。如果希望在一个列中只允许正值并且需要一个稍大一点的数字范围,就可以使用无符号值。
</P>

<P>
从 MySQL 4.0.2 开始,浮点类型也可以存在 <CODE>UNSIGNED</CODE>。
与整型类型一致的,这个属性可以防止在该列中存在负值。而与整型类型不一致的,该列的高部范围仍然与原范围保持一致。
</P>

<P>
<CODE>FLOAT</CODE> 类型被用于表示近似数字的数值类型。ANSI/ISO SQL92 标准允许一个可选的精度说明(但不是指数的范围),跟在 关键词 <CODE>FLOAT</CODE> 后的括号内。MySQL 实现也支持这个可选的精度规格说明。当关键词被用于一个列的类型说明而没有精度规格说明时,MySQL 使用四个字节来存储该字段值。在关键词 <CODE>FLOAT</CODE> 后的括号里给出两个数字,这种变形的句法也是被支持的。使用这个选项时,第一个数字继续表示值存储所占的字节数,第二个数字指定能被存储和显示的跟随在小数点后的位数(就像 <CODE>DECIMAL</CODE> 和 <CODE>NUMERIC</CODE>)。当 MySQL 被要求为这样的一个列存储一个小数点后的小数位数超过指定值的数值时,该值将会被四舍五入,去除额外的位。
</P>

<tt>示例(译者注):</tt>
<PRE>
mysql&#62; CREATE TABLE `tA` (
    -&#62;   `id` int(4) unsigned zerofill NOT NULL,
    -&#62;   `float_date` float(4,2) unsigned NOT NULL,
    -&#62;   PRIMARY KEY  (`id`)
    -&#62; ) TYPE=MyISAM;
Query OK, 0 rows affected (0.00 sec)

mysql&#62; INSERT INTO `tA` (`id`,`float_date`)
    -&#62;  VALUES (1, -100),        # 插入无效的负值
    -&#62;         (2, 100.99),      # 以数字方式插入
    -&#62;         (3, "100.99"),    # 以字符串方式插入
    -&#62;         (4, "100.99999"), # 小数位数超过指定倍数,该值进行四舍五入
    -&#62;         (5, 100.99999),
    -&#62;         (6, "100.9911"),
    -&#62;         (7, 100.9911);
Query OK, 7 rows affected (0.00 sec)
Records: 7  Duplicates: 0  Warnings: 1

mysql&#62; SELECT * FROM `tA`;
+------+------------+
| id   | float_date |
+------+------------+
| 0001 |       0.00 |
| 0002 |     100.99 |
| 0003 |     100.99 |
| 0004 |     101.00 |
| 0005 |     101.00 |
| 0006 |     100.99 |
| 0007 |     100.99 |
+------+------------+
7 rows in set (0.00 sec)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -