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

📄 manual_reference.html

📁 MySQL参考手册中文版
💻 HTML
📖 第 1 页 / 共 5 页
字号:
</p>

<p><code>REAL</code>和<code>DOUBLE PRECISION</code>类型不接受精度说明。作为对 
ANSI/ISO SQL92 标准的扩展,<strong>MySQL</strong>识别出<code>DOUBLE</code>作为<code>DOUBLE 
PRECISION</code>类型的一个同义词。与<code>REAL</code>精度比用于<code>DOUBLE 
PRECISION</code>的更小的标准要求相反,<strong>MySQL</strong>实现了两种,作为8字节双精度浮点值(当运行不是“Ansi模式”时)。为了最大的移植性,近似数字的数据值的存储所需代码应该使用没有精度或小数位数说明的<code>FLOAT</code>或<code>DOUBLE 
PRECISION</code>。 </p>

<p>当要求在数字的列存储超出该列类型允许的范围的值时,<strong>MySQL</strong>剪切该值到范围内的正确端点值并且存储剪切后的结果值。 
</p>

<p>例如,一个<code>INT</code>列的范围是<code>-2147483648</code>到<code>2147483647</code>。如果你试图插入<code>-9999999999</code>到一个<code>INT</code>列中,值被剪切到范围的低部端点,并存储<code>-2147483648</code>。同样,如果你试图插入<code>9999999999</code>,<code>2147483647</code>被存储。 
</p>

<p>如果<code>INT</code>列是<code>UNSIGNED</code>,列的范围的大小是相同的,但是它的端点移到<code>了0</code>和<code>4294967295</code>。如果你试图存储<code>-9999999999</code>和<code>9999999999</code>,在列被存储的值变为<code>0</code>和<code>4294967296</code>。 
</p>

<p>对于<code>ALTER TABLE</code>、<code>LOAD DATA INFILE</code>、<code>UPDATE</code>和多行<code>INSERT</code>语句,由于剪切所发生的变换作为“警告”被报告。 
</p>

<h3><a NAME="Date_and_time_types" HREF="manual_toc.html#Date_and_time_types">7.3.6 
日期和时间类型</a></h3>

<p>日期和时间类型是<code>DATETIME</code>、<code>DATE</code>、<code>TIMESTAMP</code>、<code>TIME</code>和<code>YEAR</code>。这些的每一个都有合法值的一个范围,而“零”当你指定确实不合法的值时被使用。注意,MySQL允许你存储某个“不严格地”合法的日期值,例如<code>1999-11-31</code>,原因我们认为它是应用程序的责任来处理日期检查,而不是SQL服务器。为了使日期检查更“快”,<strong>MySQL</strong>仅检查月份在0-12的范围,天在0-31的范围。上述范围这样被定义是因为<strong>MySQL</strong>允许你在一个<code>DATE</code>或<code>DATETIME</code>列中存储日期,这里的天或月是零。这对存储你不知道准确的日期的一个生日的应用程序来说是极其有用的,在这种情况下,你简单地存储日期象<code>1999-00-00</code>或<code>1999-01-00</code>。(当然你不能期望从函数如<code>DATE_SUB()</code>或<code>DATE_ADD()</code>得到类似以这些日期的正确值)。 
</p>

<p>当用日期和时间工作时,这里是的一些要记住的一般考虑: 

<ul>
  <li><strong>MySQL</strong>对一个给定的日期或时间类型以标准的格式检索,但是它试图为你提供的值解释成许多格式(例如,当你指定一个值被赋给或与比较一个日期或时间类型时),但是只支持有在下列小节描述的格式。期望你提供合法的值,并且如果你以其他格式使用这些值,可能造成无法预料的结果。 
  </li>
  <li>尽管<strong>MySQL</strong>试图以多种格式解释值,但它总是期望日期值的年份部分在最左面,日期必须以年-月-日的顺序给出(例如,<code>'98-09-04'</code>),而不是以其他地方常用的月-日-年或日-月-年的次序(例如,<code>'09-04-98'</code>、'04-09-98')。 
  </li>
  <li>如果一个值在数字的上下文环境中被使用,<strong>MySQL</strong>自动变换一个日期或时间类型值到一个数字,反过来也如此。 
  </li>
  <li>当<strong>MySQL</strong>遇到一个日期或时间类型的值超出范围或对给类型不合法(见本节的开始)时,它将该类型的值变换到“零”值。(例外的是超出范围的<code>TIME</code>值被剪切为适当的<code>TIME</code>范围端点值。)下表显示对每种类型的“零”值的格式: 
    <table BORDER="1" WIDTH="100%" NOSAVE="#101090" class="p4">
      <tr>
        <td><strong>列类型</strong> </td>
        <td><strong>“零”值</strong> </td>
      </tr>
      <tr>
        <td><code>DATETIME</code> </td>
        <td><code>'0000-00-00 00:00:00'</code> </td>
      </tr>
      <tr>
        <td><code>DATE</code> </td>
        <td><code>'0000-00-00'</code> </td>
      </tr>
      <tr>
        <td><code>TIMESTAMP</code> </td>
        <td><code>00000000000000</code>(长度取决于显示尺寸)</td>
      </tr>
      <tr>
        <td><code>TIME</code> </td>
        <td><code>'00:00:00'</code> </td>
      </tr>
      <tr>
        <td><code>YEAR</code> </td>
        <td><code>0000</code> </td>
      </tr>
    </table>
  </li>
  <li>“零”值是特殊的,但是你能使用在表中显示的值来明显地存储或引用他们。你也可以使用值<code>'0'</code>或<code>0</code>做到, 
    这更容易写。 </li>
  <li>在<strong>MyODBC</strong> 2.50.12和以上版本中,由<strong>MyODBC</strong>使用的“零”日期或时间值被自动变换到<code>NULL</code>,因为ODBC不能处理这样的值。 
  </li>
</ul>

<h4><a NAME="Y2K_issues" HREF="manual_toc.html#Y2K_issues">7.3.6.1 Y2K问题和日期类型</a></h4>

<p><strong>MySQL</strong>本身Y2K安全的(见<a HREF="manual_Introduction.html#Year_2000_compliance">1.6 2000年一致性</a>),但是呈交给<strong>MySQL</strong>的输入值可能不是。一个包含2位年份值的任何输入是由二义性的,因为世纪是未知的。这样的值必须被解释成4位形式,因为<strong>MySQL</strong>内部使用4位存储年份。 
</p>

<p>对于<code>DATETIME</code>, <code>DATE</code>, <code>TIMESTAMP</code>和<code>YEAR</code>类型,<strong>MySQL</strong>使用下列规则的解释二义性的年份值: 

<ul>
  <li>在范围<code>00-69</code>的年值被变换到<code>2000-2069</code>。 </li>
  <li>在范围<code>70-99</code>的年值被变换到<code>1970-1999</code>。</li>
</ul>

<p>记得这些规则仅仅提供对于你数据的含义的合理猜测。如果<strong>MySQL</strong>使用的启发规则不产生正确的值,你应该提供无二义的包含4位年值的输入。 
</p>

<h4><a NAME="DATETIME" HREF="manual_toc.html#DATETIME">7.3.6.2 <code>DATETIME</code>, <code>DATE</code>和<code>TIMESTAMP</code>类型</a></h4>

<p><code>DATETIME</code>, <code>DATE</code>和<code>TIMESTAMP</code>类型是相关的。本节描述他们的特征,他们是如何类似的而又不同的。 
</p>

<p><code>DATETIME</code>类型用在你需要同时包含日期和时间信息的值时。<strong>MySQL</strong>检索并且以<code>'YYYY-MM-DD 
HH:MM:SS'</code>格式显示<code>DATETIME</code>值,支持的范围是<code>'1000-01-01 
00:00:00'</code>到<code>'9999-12-31 23:59:59'</code>。(“支持”意味着尽管更早的值可能工作,但不能保证他们可以。)</p>

<p><code>DATE</code>类型用在你仅需要日期值时,没有时间部分。<strong>MySQL</strong>检索并且以<code>'YYYY-MM-DD'</code>格式显示<code>DATE</code>值,支持的范围是<code>'1000-01-01'</code>到<code>'9999-12-31'</code>。 
</p>

<p><code>TIMESTAMP</code>列类型提供一种类型,你可以使用它自动地用当前的日期和时间标记<code>INSERT</code>或<code>UPDATE</code>的操作。如果你有多个<code>TIMESTAMP</code>列,只有第一个自动更新。 
</p>

<p>自动更新第一个<code>TIMESTAMP</code>列在下列任何条件下发生: 

<ul>
  <li>列没有明确地在一个<code>INSERT</code>或<code>LOAD DATA INFILE</code>语句中指定。 
  </li>
  <li>列没有明确地在一个<code>UPDATE</code>语句中指定且一些另外的列改变值。(注意一个<code>UPDATE</code>设置一个列为它已经有的值,这将不引起<code>TIMESTAMP</code>列被更新,因为如果你设置一个列为它当前的值,<strong>MySQL</strong>为了效率而忽略更改。)</li>
  <li>你明确地设定<code>TIMESTAMP</code>列为<code>NULL</code>. </li>
</ul>

<p>除第一个以外的<code>TIMESTAMP</code>列也可以设置到当前的日期和时间,只要将列设为<code>NULL</code>,或<code>NOW()</code>。 
</p>

<p>通过明确地设置希望的值,你可以设置任何<code>TIMESTAMP</code>列为不同于当前日期和时间的值,即使对第一个<code>TIMESTAMP</code>列也是这样。例如,如果,当你创建一个行时,你想要一个<code>TIMESTAMP</code>被设置到当前的日期和时间,但在以后无论何时行被更新时都不改变,你可以使用这个属性: 

<ul>
  <li>让<strong>MySQL</strong>在行被创建时设置列,这将初始化它为当前的日期和时间。 
  </li>
  <li>当你执行随后的对该行中其他列的更改时,明确设定<code>TIMESTAMP</code>列为它的当前值。 
  </li>
</ul>

<p>另一方面,你可能发现,当行被创建并且远离随后的更改时,很容易用一个你用<code>NOW()</code>初始化的<code>DATETIME</code>列。 
</p>

<p><code>TIMESTAMP</code>值可以从1970的某时的开始一直到2037年,精度为一秒,其值作为数字显示。 
</p>

<p>在<strong>MySQL</strong>检索并且显示<code>TIMESTAMP</code>值取决于显示尺寸的格式如下表。“完整”<code>TIMESTAMP</code>格式是14位,但是<code>TIMESTAMP</code>列可以用更短的显示尺寸创造: 
</p>

<table BORDER="1" WIDTH="100%" NOSAVE="#101090" class="p4">
  <tr>
    <td><strong>列类型</strong> </td>
    <td><strong>显示格式</strong> </td>
  </tr>
  <tr>
    <td><code>TIMESTAMP(14)</code> </td>
    <td><code>YYYYMMDDHHMMSS</code> </td>
  </tr>
  <tr>
    <td><code>TIMESTAMP(12)</code> </td>
    <td><code>YYMMDDHHMMSS</code> </td>
  </tr>
  <tr>
    <td><code>TIMESTAMP(10)</code> </td>
    <td><code>YYMMDDHHMM</code> </td>
  </tr>
  <tr>
    <td><code>TIMESTAMP(8)</code> </td>
    <td><code>YYYYMMDD</code> </td>
  </tr>
  <tr>
    <td><code>TIMESTAMP(6)</code> </td>
    <td><code>YYMMDD</code> </td>
  </tr>
  <tr>
    <td><code>TIMESTAMP(4)</code> </td>
    <td><code>YYMM</code> </td>
  </tr>
  <tr>
    <td><code>TIMESTAMP(2)</code> </td>
    <td><code>YY</code> </td>
  </tr>
</table>

<p>所有的<code>TIMESTAMP</code>列都有同样的存储大小,不考虑显示尺寸。最常见的显示尺寸是6、8、12、和14。你可以在表创建时间指定一个任意的显示尺寸,但是值0或比14大被强制到14。在从1~13范围的奇数值尺寸被强制为下一个更大的偶数。 
</p>

<p>使用一个常用的格式集的任何一个,你可以指定<code>DATETIME</code>、<code>DATE</code>和<code>TIMESTAMP</code>值: 

<ul>
  <li><code>'YYYY-MM-DD HH:MM:SS'</code>或<code>'YY-MM-DD HH:MM:SS'</code>格式的一个字符串。允许一种“宽松”的语法--任何标点可用作在日期部分和时间部分之间的分隔符。例如,<code>'98-12-31 
    11:30:45'</code>、<code>'98.12.31 11+30+45'</code>、<code>'98/12/31 11*30*45'</code>和<code>'98@12@31 
    11^30^45'</code>是等价的。 </li>
  <li><code>'YYYY-MM-DD'</code>或<code>'YY-MM-DD'</code>格式的一个字符串。允许一种“宽松”的语法。例如,<code>'98-12-31'</code>, 
    <code>'98.12.31'</code>, <code>'98/12/31'</code>和<code>'98@12@31'</code>是等价的。 </li>
  <li><code>'YYYYMMDDHHMMSS'</code>或<code>'YYMMDDHHMMSS'</code>格式的没有任何分隔符的一个字符串,例如,<code>'19970523091528'</code>和<code>'970523091528'</code>被解释为<code>'1997-05-23 
    09:15:28'</code>,但是<code>'971122459015'</code>是不合法的(它有毫无意义的分钟部分)且变成<code>'0000-00-00 
    00:00:00'</code>。 </li>
  <li><code>'YYYYMMDD'</code>或<code>'YYMMDD'</code>格式的没有任何分隔符的一个字符串,如果字符串认为是一个日期。例如,<code>'19970523'</code>和<code>'970523'</code>被解释作为<code>'1997-05-23'</code>,但是<code>'971332'</code>是不合法的( 
    它有无意义的月和天部分)且变成<code>'0000-00-00'</code>。 </li>
  <li><code>YYYYMMDDHHMMSS</code>或<code>YYMMDDHHMMSS</code>格式的一个数字,如果数字认为是一个日期。例如,<code>19830905132800</code>和<code>830905132800</code>被解释作为<code>'1983-09-05 
    13:28:00'</code>。 </li>
  <li><code>YYYYMMDD</code>或<code>YYMMDD</code>格式的一个数字,如果数字认为是一个日期。例如,<code>19830905</code>和<code>830905</code>被解释作为<code>'1983-09-05'</code>。 
  </li>
  <li>一个返回值可以在一个<code>DATETIME</code>, <code>DATE</code>或<code>TIMESTAMP</code>上下文环境中接受的函数,例如<code>NOW()</code>或<code>CURRENT_DATE</code>。 
  </li>
</ul>

<p>不合法<code>DATETIME</code>, <code>DATE</code>或<code>TIMESTAMP</code>值被变换到适当类型的“零”值(<code>'0000-00-00 
00:00:00'</code>, <code>'0000-00-00'</code>或<code>00000000000000</code>)。 </p>

<p>对于包括的日期部分分隔符的指定为字符串的值,不必要为小于<code>10</code>的月或天的值指定2位数字,<code>'1979-6-9'</code>与<code>'1979-06-09'</code>是一样的。同样, 
对于包括的时间部分分隔符的指定为字符串的值,不必为小于<code>10</code>的小时、月或秒指定2位数字,<code>'1979-10-30 
1:2:3'</code>与<code>'1979-10-30 01:02:03'</code>是一样的。 </p>

<p>指定为数字应该是6、8、12或14位长。如果数字是8或14位长,它被假定以<code>YYYYMMDD</code>或<code>YYYYMMDDHHMMSS</code>格式并且年份由头4位数字给出。如果数字是6或12位长,它被假定是以<code>YYMMDD</code>或<code>YYMMDDHHMMSS</code>格式且年份由头2位数字给出。不是这些长度之一的数字通过填补前头的零到最接近的长度来解释。 
</p>

<p>指定为无分隔符的字符串用它们给定的长度来解释。如果字符串长度是8或14个字符,年份被假定头4个字符给出,否则年份被假定由头2个字符给出。对于字符串中呈现的多个部分,字符串从左到右边被解释,以找出年、月、日、小时、分钟和秒值,这意味着,你不应该使用少于 

⌨️ 快捷键说明

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