MySQL数据表中内容大小写区分的设置

MYSQL在默认的情况下查询是不区分大小写的,例如:

?


1

2

3

4

5

6

7

mysql> create table t1(

-> name varchar(10));

Query OK, 0 rows affected (0.09 sec)

mysql> insert into t1 values(‘you‘),(‘You‘),(‘YOU‘);

Query OK, 3 rows affected (0.05 sec)

Records: 3 Duplicates: 0 Warnings: 0

对这个表,缺省情况下,下面两个查询的结果是一样的:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

mysql> select * from t1 where name = ‘you‘;

+------+

| name |

+------+

| you |

| You |

| YOU |

+------+

3 rows in set (0.00 sec)

mysql> select * from t1 where name = ‘YOU‘;

+------+

| name |

+------+

| you |

| You |

| YOU |

+------+

3 rows in set (0.00 sec)

如果想让MYSQL知道你输入的字母是大写还是小写的,修改表:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

mysql> alter table t1 change name name varchar(10) binary;

Query OK, 3 rows affected (0.20 sec)

Records: 3 Duplicates: 0 Warnings: 0

mysql> select * from t1 where name = ‘you‘;

+------+

| name |

+------+

| you |

+------+

1 row in set (0.00 sec)

mysql> select * from t1 where name = ‘YOU‘;

+------+

| name |

+------+

| YOU |

+------+

1 row in set (0.00 sec)

如果你只是想在SQL语句中实现的话:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

mysql> select * from t1 where name = binary ‘YOU‘;

+------+

| name |

+------+

| YOU |

+------+

1 row in set (0.02 sec)

mysql> select * from t1 where name = binary ‘you‘;

+------+

| name |

+------+

| you |

+------+

1 row in set (0.00 sec)

如果不想这么麻烦而想服务一开启就让大小写一致的话:

可以修改my.ini或者my.cnf

?


1

2

3

[mysqld]

lower_case_table_names=1

(0:区分;1:不区分)

然后重启MYSQL服务。

?


1

2

3

4

5

6

7

mysql> show variables like ‘%case_table%‘;

+------------------------+-------+

| Variable_name | Value |

+------------------------+-------+

| lower_case_table_names | 1 |

+------------------------+-------+

1 row in set (0.00 sec)

在跨平台的程序设计中要注意到mysql的一些系统变量在windows和linux上的缺省值是不同的, 比如mysql表名称的大小写变量.

在windows上lower_case_table_names变量的缺省值为1; 在linux上为0; 在mac os上为2;

该变量值的详细定义如下

Value Meaning
0 Table and database names are stored on disk using the lettercase specified in the CREATE TABLE orCREATE DATABASE statement. Name comparisons are case sensitive. You should not set this variable to 0 if you are running MySQL on a system that has case-insensitive file names (such as Windows or Mac OS X). If you force this variable to 0 with --lower-case-table-names=0 on a case-insensitive file system and access MyISAM tablenames using different lettercases, index corruption may result.
1 Table names are stored in lowercase on disk and name comparisons are not case sensitive. MySQL converts all table names to lowercase on storage and lookup. This behavior also applies to database names and table aliases.
2 Table and database names are stored on disk using the lettercase specified in the CREATE TABLE orCREATE DATABASE statement, but MySQL converts them to lowercase on lookup. Name comparisons are not case sensitive. This works only on file systems that are not case sensitive! InnoDB table names are stored in lowercase, as forlower_case_table_names=1.
时间: 2024-10-20 06:33:22

MySQL数据表中内容大小写区分的设置的相关文章

Linux中MySQL忽略表中字段大小写

linux 下,mysql 的表面默认是区分大小写的,windows 下默认不区分大小写,我们大多数在windows 下开发,之后迁移到linux(特别是带有Hibernate的工程),可以修改配置是linux下,myql 表名不区分大小写 MySQL在Linux下数据库名.表名.列名.别名大小写规则是这样的:     1.数据库名与表名是严格区分大小写的:     2.表的别名是严格区分大小写的:     3.列名与列的别名在所有的情况下均是忽略大小写的:     4.变量名也是严格区分大小写

【转】MySQL数据表中记录不存在则插入,存在则更新

mysql 记录不存在时插入在 MySQL 中,插入(insert)一条记录很简单,但是一些特殊应用,在插入记录前,需要检查这条记录是否已经存在,只有当记录不存在时才执行插入操作,本文介绍的就是这个问题的解决方案. 问题:我创建了一个表来存放客户信息,我知道可以用 insert 语句插入信息到表中,但是怎么样才能保证不会插入重复的记录呢? 答案:可以通过使用 EXISTS 条件句防止插入重复记录. 示例一:插入多条记录 假设有一个主键为 client_id 的 clients 表,可以使用下面的

从mysql数据表中随机取出一条记录

核心查找数据表代码: select * from 表名 order by rand( ) limit 1; //此处的1就是取出数据的条数 但这样取数据网上有人说效率非常差的,那么要如何改进呢 搜索Google,网上基本上都是查询max(id) * rand()来随机获取数据. SELECT * FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM `table`)) AS id) AS t2 WHERE t1.i

2014.11.26 向MySQL数据表中插入数据时,显示“syntax error”时应检查

插入语句: "insert into tablename (a,b,c,d) values(1,2,3,4)" 插入结果: a b c d 1 2 3 4 有误时,请检查: 1.名值对有没有写错: 2.代码的字符串处理有没有问题: 3.代码中的列名和表中的列名是不是一一对应的: 4.定义的列名是否跟SQL语句中的关键字重复,例如dec等.

mysql 数据表中查找重复记录

//例一:select name1,count(*) as count from table_name group by name1 having count>1;//例二:select name1,name2 ,count(name1) as countb,count(name2) as count from table_name group by name1,name2 having count>1 and countb >1;

Django注册使用已有的mysql数据表

在之前的时候如果想要注册mysql数据表的话需要在models.py文件中写好表结构等内容,但这种情况只适合初建新表的时候,那如果需要使用已经在mysql中建好的表并且存有数据的表时该怎么操作呢? 如果mysql数据表中已经存有了数据,就在站点的目录下执行下面的命令将mysql表映射到django的models中 python manage.py inspectdb > models.py 然后将生成models.py文件覆盖掉站点app中的models.py即可 最后同步一下数据库即可 pyt

mysql数据表增删改查

http://www.runoob.com/mysql/mysql-tutorial.html 一.MySQL 创建数据表 创建MySQL数据表需要以下信息: 表名 表字段名 定义每个表字段 语法 以下为创建MySQL数据表的SQL通用语法: CREATE TABLE table_name (column_name column_type); 以下例子中我们将在 RUNOOB 数据库中创建数据表runoob_tbl: CREATE TABLE IF NOT EXISTS `runoob_tbl`

MySQL查询数据表中数据记录(包括多表查询)

MySQL查询数据表中数据记录(包括多表查询) MySQL查询数据表中数据记录(包括多表查询) 转自:http://www.baike369.com/content/?id=5355 在MySQL中创建数据库的目的是为了使用其中的数据. 使用select查询语句可以从数据库中把数据查询出来. select语句的语法格式如下: select selection_list // 要查询的内容,选择哪些列 from table_list // 从什么表中查询,从何处选择行 where primary_

PHP mysql 删除表中所有数据只保留一条

DELETE FROM `logs` WHERE wangzhi='www.juhutang.com' and id<>101072; 上面这段代码的意思为 删除表logs中 所有字段wangzhi含内容为www.juhutang.com的数据.但是不删除同表中 id 是101072 的这条数据. 当然了 我是新手,这条语句可能与标题不是那么完善, 希望大牛解答,删除表中所有数据,保留最近的一条 或者说只保留主键ID最大的一条. 这语句如何写. PHP mysql 删除表中所有数据只保留一条