Category: "MySQL, Oracle, 数据库" , Tags: binary, MySQL, varchar, 大写小写, 大小写不敏感
是Shacho.
我会接二连三地写哦!
今天的内容也是面向MySQL初学者的秘诀.
这个秘诀是MySQL自身在文件里谈到的规格, 可是好像Oracle技师都觉得这是不可能的. 很多人没想到这是选项之一.
不过, 规格是规格, 没办法, 是不是?如果你看看他们的正式文件, 这是很明显的. 可是我看很多人不读这文件.
这是可以理解的. (反正, 你应该读一下)
第2: 在varchar类型列里没有大小写的分别 (搜索时的大小写不敏感性)
这是大家总问我的.
MySQL文件叫它”搜索时的大小写敏感性” (Case Sensitivity in Searches).
由于这是太常见的问题, 我不想主动地提到这件事,
但大概开始测试的时候,
很多人问我”我在WHERE字句里写的字符串跟大写的和小写的都一致, 嗯, 难道MySQL不分别大小写吗?”
问得好像我是设计的人.
“请你添加binary属性.”
char类型的也是一样.
要是你要创建新的
Create Table 表名(列名 varchar(n) BINARY);
不能重新创建的话
Alter Table 表名 MODIFY 列名 varchar(n) BINARY;
以下为Oracle技师列举了几个例子.
– 以col1附加binary属性, col2保留默认值, 创建表
mysql> Create Table tab1 (col1 varchar(10) BINARY, col2 varchar(10));
Query OK, 0 rows affected (0.19 sec)
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| tab1 |
+----------------+
1 rows in set (0.00 sec)
– 选择全部
mysql> select * from tab1;
+------+------+
| col1 | col2 |
+------+------+
| aaa | BBB |
+------+------+
1 row in set (0.00 sec)
– 留意大小写, 附条件搜索col1(添加了binary属性的)
mysql> select * from tab1 where col1 = 'AAA';
Empty set (0.00 sec)
– 取得了0个. Oracle技师期待的结果是这样的.
– 接着, 留意大小写, 附条件搜索col2(没添加binary属性的)
mysql> select * from tab1 where col2 = 'bbb';
+------+------+
| col1 | col2 |
+------+------+
| aaa | BBB |
+------+------+
1 row in set (0.00 sec)
– 取得了1个
– 但是, 表里字符串的大小写和条件里字符串的大小写不一致
– 这是一个理由Oracle技师说 “MySQL不好用”
– 这是没办法的, 所以用Alter Table来添加binary属性
mysql> Alter Table tab1 MODIFY col2 varchar(10) BINARY;
Query OK, 1 row affected (0.48 sec)
Records: 1 Duplicates: 0 Warnings: 0
– 再次照以上的条件搜索
mysql> select * from tab1 where col2 = 'bbb';
Empty set (0.00 sec)
– 这是你所期待的结果啵?(用日本小酒馆服务员的口气问问…)
言归正传, 如果你要认识添加binary属性时和没添加时, MySQL里的Create Table SQL是怎么样的, 用 “show create table 表名” 看看.
这会给你看看MySQL本来的SQL是怎么样的.


