随笔-211  评论-26  文章-8  trackbacks-0

逻辑运算

MySQL支持所有的基本逻辑运算。

AND (&&) 与


mysql> SELECT * FROM test WHERE
mysql>
(name = "Bugs Bunny") AND
mysql>
(phone_number = 5554321);

结果:
所有同时包含名字 "Bugs Bunny"电话号码'5554321'的记录会显示出来。

OR ( || ) 或


mysql> SELECT * FROM test WHERE
mysql>
(name = "Bugs Bunny") OR
mysql>
(phone_number = 5554321);

结果:
所有包含名字 "Bugs Bunny" 电话号码'5554321'的记录会显示出来。

NOT ( ! ) 非


mysql> SELECT * FROM test WHERE
mysql>
(name != "Bugs Bunny");

结果:
所有不包含名字 "Bugs Bunny" 的记录会显示出来。

Order By 按序排列


mysql> SELECT * FROM test WHERE
mysql>
(name = "Bugs Bunny") ORDER BY
mysql>
phone_number;

结果:
所有包含名字 "Bugs Bunny" 的记录会显示出来,并以电话号码为排序方式。

查询功能

MySQL为用户提供了粗略搜索和详细搜索的选择。


mysql> SELECT * FROM test WHERE
mysql>
(name LIKE "%gs Bunny");

结果:

显示出来的是所有包含字符"gs Bunny"的记录,下面的字段都符合该条件:"Bugs Bunny", "ags Bunny", "gs Bunny", and "234rtgs Bunny"。请注意这里使用的是"LIKE"而不是等号(=),表示搜索的是和条件相似的记录,而不必是完全一样。百分号 '%'可以放在字符串当中的任何地方,服务器搜索字符串的方式则取决于'%'放在何处。


mysql> SELECT * FROM test WHERE
mysql>
(name LIKE "Bugs Bunny%");

结果:

显示出来的是所有包含字符"gs Bunny"的记录,下面的字段都符合该条件:"Bugs Bunnys", "Bugs Bunnyyyy453", "Bugs Bunnytrtrtrtrtr", 但是 "gs Bunny"则不符合条件。

我们也可以使用等号条件式来搜索:


mysql> SELECT name FROM test WHERE
mysql>
(name = "Bugs Bunny");

结果:

name
Bugs Bunny

更改表内容

MySQL的另一个重要功能就是修改表中已经存在的数据。修改表数据要使用ALTER命令,该命令可以增加、修改、删除列,同时也可以对表进行重命名。

例如: 将表名称由test改为mytest,


mysql> ALTER table test RENAME mytest;

例如: 在表mytest中添加列日期型表列birthday,


mysql> ALTER table mytest ADD birthday DATE;

例如: 将表mytest中的name列改为newname,类型是VARCHAR (25),

mysql> ALTER table mytest CHANGE
mysql>
name newname VARCHAR (25);

例如: 删除表mytest中名为newname的列,


mysql> ALTER table mytest DROP newname;

顺序执行上面的四个命令之后的结果是生成下面的表。


mysql> TABLE mytest (
>
email VARCHAR (25),
>
phone_number INT,
>
ID INT AUTO_INCREMENT,
>
birthday DATE );

MYSQL数据库默认语言为瑞典语, 现有一GB2312字符的数据库.
结构OK. 为什么内容是乱码? 不重装数据库有办法解决码?

从MySQL 4.1开始引入的多语言支持确实很棒,而且一些特性已经超过了其他的数据库系统。不过我在测试过程中发现使用适用于MySQL 4.1之前的PHP语句操作MySQL数据库会造成乱码,即使是设置过了表字符集也是如此。我读了一下新的MySQL在线手册中第十章"Character Set Support"后终于找到了解决方法并测试通过。

MySQL 4.1的字符集支持(Character Set Support)有两个方面:字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection)。

查看系统的字符集和排序方式的设定可以通过下面的两条命令:


mysql> SHOW VARIABLES LIKE 'character_set_%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
7 rows in set (0.00 sec)

mysql> SHOW VARIABLES LIKE 'collation_%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec)

改变上面的字符集可用命令
 set names gbk

在这部教程里,我们只对MySQL的使用进行了简单的介绍。但这些功能都是我们进行编程所必须熟悉的基本操作。最重要的还是多多实践,参考相关技术文档,多参加网上相关技术的讨论。

To allow multiple character sets to be sent from the client, the "UTF-8" encoding should be used,
either by configuring "utf8" as the default server character set,
or by configuring the JDBC driver to use "UTF-8" through the characterEncoding property.
在查阅《MySQL权威指南》时,发现在查询语句中可以使用这样的语法将字符串转换到一个给定的字符集:_charset str。

其中charset必须是服务器支持的某个字符集。在本例中,shopdb数据库使用的默认字符集是utf8,于是开始测试:

先输入INSERT INTO publish Values(''8'',_gb2312 ''高等教育出版社'') 写入后中文变成“??”

再试INSERT INTO publish Values(''8'',_gbk ''高等教育出版社'') 结果同上

INSERT INTO publish Values(''8'',_utf8 ''高等教育出版社'') 这下更干脆,什么都没有!!

快疯了!!没办法,用show character set;命令查看MySQL支持的字符集,心想我都试一遍总有一个能成功吧。
浏览了一下,发现没有几个熟悉的字符集,就只剩下一个latin1(ISO-8859-1)比较常见了,不会是它吧,一试之下果然便是。

INSERT INTO publish Values(''8'',_latin1 ''高等教育出版社'') 输入中文能够正确显示。


在编写代码的时候,你可能会使用某种开发工具,例如我正在使用的Eclipse.
或许在写的时候一切正常,可是一旦保存后再次打开文档,所有的中文字符都变成了乱码。
这是因为在编写的时候,这些字符数据都在内存的某个stream中,ok,这没问题,可是保存的时候这个stream中的数据会被写入到硬盘,
使用的就是你的开发工具默认的编码方式,如果很不幸你的开发工具默认编码方式是ISO-8859-1,中文字符信息就不能正确地存储。
Eclipse中可以这样查看并修改默认字符编码方式:Project->Properties->info,这里有"default
encoding for text file"。如果设置为GBK,那么编写代码并保存这关就过了。

posted on 2006-10-08 17:41 dragon 阅读(138) 评论(0)  编辑  收藏 所属分类: 数据库知识