Chinaunix首页 | 论坛 | 博客
  • 博客访问: 101901606
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Mysql/postgreSQL

2008-04-24 10:58:07

 作者:极度深寒   来自:bbs.51cto.com




     MySQL 拥有一个复杂的但直观易学的 SQL 接口。这个章节描述了各种不同的命令、类型和函数,为了高效地使用 MySQL 需要了解它们。这个章节也可以视为 MySQL 中包含的所有功能的参考。

6.1 语言结构

     6.1.1 文字:怎么写字符串与数字

     这个章节描述了在 MySQL 中书写字符串与数字的各种不同方式。也包含有对各种不同差别和“gotchas”,当你在处理 MySQL 的基本类型时可能陷入的疑惑。

     6.1.1.1 字符串

     字符串是多个字符组成的一个字符序列,由单引号(“'”) 或双引号 (“"”) 字符包围。(但在 ANSI 模式中运行时只能用单引号)。

     例如:
     'a string'
     "another string"

     在一个字符串中,如果某个序列具有特殊的含义,每个序列以反斜线符号 (“\”)开头,称为转义字符。 MySQL 识别下列转义字符:

     \0   一个 ASCII 0 (NUL) 字符。

     \'    一个 ASCII 39 单引号 (“'”) 字符。

     \"    一个 ASCII 34 双引号 (“"”) 字符。

     \b   一个 ASCII 8 退格符。

     \n   一个 ASCII 10 换行符。

     \r    一个 ASCII 13 回车符。

     \t    一个 ASCII 9 制表符(TAB)。

     \z    ASCII(26) (Control-Z)。这个字符可以处理在 Windows 系统中 ASCII(26) 代表一个文件的结束的问题。(当使用 mysql database  时 ASCII(26) 可能会引起问题产生。)

     \\    一个 ASCII 92 反斜线 (“\”) 字符。

     \%   一个 ASCII 37 “%” 字符。它用于在正文中搜索“%”的文字实例,否则这里“%”将解释为一个通配符。

     \_    一个 ASCII 95 “_” 字符。它用于在正文中搜索“_”的文字实例,否则这里“_”将解释为一个通配符。

     注意如果在某些正文环境内使用 “\%” 或 “\_”,将返回字符串 “\%” 和 “\_” 而不是 “%” 和 “_”。

     字符串中包含引号的可以有下列几种写法:

     ◆一个字符串用单引号“'”来引用的,该字符串中的单引号“'”字符可以用“''”方式转义。

     ◆一个字符串用双引号“"”来引用的,该字符串中的“"”字符可以用“""”方式转义。

     ◆你也可以继续使用在引号前加一个转义字符“\”来转义的方式。

     ◆一个字符串用双引号“"”来引用的,该字符串中的单引号“'”不需要特殊对待而且不必被重复或转义。同理,一个字符串用单引号“'”来引用的,该字符串中的双引号“"”不需要特殊对待而且不必被重复或转义。

     下面显示的 SELECT 演示引号和转义是如何工作:

     mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello';

     +-------+---------+-----------+--------+--------+
     | hello  | "hello"  | ""hello""  | hel'lo  | 'hello  |
     +-------+---------+-----------+--------+--------+

     mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello";

     +-------+---------+-----------+--------+--------+
     | hello  | 'hello'  | ''hello''  | hel"lo  | "hello  |
     +-------+---------+-----------+--------+--------+

     mysql> SELECT "This\nIs\nFour\nlines";
     +--------------------+
     | This
     Is
     Four
     lines |
     +--------------------+

     如果你想要把二进制数据插入到一个字符类型的字段中(例如BLOB),下列字符必须由转义序列表示:

     NUL  ASCII 0,你应该用 “\0”(一个反斜线和一个ASCII “0”字符)表示它。

     \       ASCII 92,反斜线。需要用 “\\” 表示。

     '       ASCII 39,单引号。需要用 “\'” 表示。

     "      ASCII 34,双引号。需要用 “\"” 表示。

     如果你写 C 代码,你可以使用 C API 函数mysql_real_escape_string() 来为 INSERT 语句转义字符。在 Perl 中,你可以使用 DBI 包中的 quote 方法来将这些特殊字符转换成适当的转义序列。

     你应该在任何可能包含上述特殊字符的字符串中使用转义函数!

     另外,很多 MySQL API 提供了一些占位符处理能力,这允许你在查询语句中插入特殊标记,然后在执行查询时对它们绑定数据值。这样,API 会自动为你从数值中转换它们。

     6.1.1.2 数字

     整数被表示为一个数字序列。浮点数使用 “.” 作为一个十进制的分隔符。这两种类型的数字可以前置 `-' 以表示一个负值。

     有效整数的例子:

     1221
     0
     -32

     有效浮点数的例子:

     294.42
     -32032.6809e+10
     148.00

     一个整数可以在浮点语境中使用;它被解释为等值的浮点数。

     6.1.1.3 十六进制值

     MySQL 支持十六进制数值。在数字的语境中,它们表现类似于一个整数(64位精度)。在字符串的语境中,它们表现类似于一个二进制的字符串,每一对十六进制数字被转换为一个字符:

     mysql> SELECT x'4D7953514C';
                    -> MySQL
     mysql> SELECT 0xa+0;
                    -> 10
     mysql> SELECT 0x5061756c;
                    -> Paul

     表达式 x'hexstring' (4.0 中新加入) 是基于 ANSI SQL 的,表达式 0x 是基于 ODBC 的。十六进制的字符串通常被 ODBC 用于为 BLOB 类型字段赋值。你可以通过 HEX() 将一个字符串或一个数值转化为十六进制格式。

     6.1.1.4 NULL 值

     NULL 值并不意味着“无数据”,并且是不同于例如数字类型的 0 或字符串类型的空串。当使用文本文件导入与导出格式时 (LOAD DATA INFILE,SELECT ... INTO OUTFILE),NULL 可以用 \N 来描述。

     6.1.2 数据库、表、索引、列和别名

     数据库、表、索引、列和别名都需遵守 MySQL 同样的规则。

     注意,从 MySQL 3.23.6 开始,规则发生改变了,此时引进了用“`”引用标识符(数据库、表和字段名)。如果你以 ANSI 模式运行,“"” 也可以用于引用标识符。

     标识符    最大长度    允许的字符
     数据库      64            一个目录名中允许的任何字符,除了“/”、“\” 或 “.”。
     表             64            一个文件名中允许的任何字符,除了 “/” 或 “.”。
     列             64           所有的字符。
     别名          255         所胡的字符。

     注意,除了上面的,在一个标识符中还不能有 ASCII(0) 或 ASCII(255) 或引用字符。

     注意,如果标识符是一个受限掉的词或包含特殊的字符,当使用它时,必须以一个 ` (backtick) 来引用它。

     mysql> SELECT * FROM `select` WHERE `select`.id > 100;


    在 MySQL 3.23.6 以前的版本中,命名规则如下:

     ◆一个名字可以由当前字符集中包含的文字与数字字符以及 “_” 和 “$” 组成。缺省字符集为 ISO-8859-1 Latin1;这可以通过改变 mysqld 的 --default-character-set 的选项来改变。

     ◆一个名字可以以在名字中合法的任何字符开始。特别地,一个名字可以以一个数字开始(这不同于许多其它的数据库系统!)。但一个名字不能 仅仅 以数字组成。

     ◆不能在名字中使用 “.” 字符,因为它是用于扩充格式的,你可以用它引用列(见下面)。

     建议不要使用象 1e 这样的名字,因为一个表达式 1e+1 是存在二义性的。它可以被解释为表达式 1e + 1 或数字 1e+1。
阅读(800) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~