IQ在创建数据库时可以通过"CASE RESPECT"或"CASE IGNORE" 选项指定“是否区分大小写”。Sybase官方手册中给定的说明不容易看懂,不太容易搞清楚“区分大小写”的准确含义。本文将结合实际的例子加以说明,力争让大家能够准确的把握其含义,从而做到正确使用。毕竟一旦创建数据库之后就不能再改变数据库的大小写区分属性了,如果设置错误想要再修改那就非常麻烦了。下面就结合例子加以说明:
1. 创建示例数据库
CREATE DATABASE '/home/sybiq15/test/mp2.db'
JAVA ON
JCONNECT ON
--CASE RESPECT --区分大小写
CASE IGNORE --不区分大小写
BLANK PADDING ON
COLLATION '936ZHO'
IQ PAGE SIZE 131072
PAGE SIZE 4096
IQ PATH '/home/sybiq15/test/mp2_iq_main.iq'
IQ SIZE 60 --60M
TEMPORARY PATH '/home/sybiq15/test/mp2_iq_temp.iq'
TEMPORARY SIZE 20 --20M;
2. 是否区分大小写的一些例子
(1) 对象名
上面的例子在建库时指定 CASE IGNORE ,那么对象名(表名、字段名、存储过程名)就不区分大小写了,否则区分。
比如 :create table t1(id int, name char(8)) 建立的表,可以使用:
select * from T1,也可以使用select * from t1。 即表明不再区分大小写
执行存储过程时比如: sp_iqtable,也可以写成SP_IQTABLE
(2)表中存放的数据
执行 insert into T1 values(1,'WangBing') 插入的数据还是按照你输入的数据大小写存储,执行:
(DBA)> select * from T1
id name
--------------------
1 WangBing
为了确定其真实的存储,可以执行下面语句:
(DBA)> select convert(binary,name) from t1
name
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
0x57616e6742696e
我们可以看到,'W'的ASCII是0x57。
(3)执行比较操作
对于“不区分”大小写的IQ数据库,虽然存储的数据区分大小写,但是执行比较操作时却不区分大小写。
例如:
(DBA)> select * from T1 where name = 'wangbing'
id name
--------------------
1 WangBing
(DBA)> select * from T1 where name = 'wanGbIng'
id name
--------------------
1 WangBing
(4)如何获知当前数据是否区分大小写
使用select case_sensitivity from sysinfo 可以看到当前数据库“区分大小写的情况”:如果是'Y'表示区分,如果是'N’表示不区分。
阅读(2948) | 评论(0) | 转发(0) |