mysql的表的大小写区分

在linux的环境下,在mysql的配置里会对大小写有一定的要求的。尤其是一些云平台提供的固定环境是配置好这些要求,所以需要对这些有一定的了解。(比如阿里云就会设定lower_case_table_names=1,具体分析在后面)

1、表名大小写

Linux默认情况下区分大小写(另外,MySQL在Windows下数据库名、表名、列名、别名都不区分大小写,即使设置lower_case_table_names=0,在查询时还是不会区分大小写。只是在导入导出时会对大小写有区别。原因是大小写的功能是在操作系统的文件系统对大小对区别的基础上实现的。WINDOWS的文件系统查询时不区分文件大小写。)

(1)变量含义解释

lower_case_file_system:数据库所在的文件系统对文件名大小写敏感度。

ON表示大小写不敏感 OFF表示敏感

lower_case_table_names:表名大小写敏感度

0表示使用Create语句指定的大小写保存文件

1表示大小写敏感,文件系统以小写保存

2表示使用Create语句指定的大小写保存文件,但MySQL会将之转化为小写

(当Linux设置为2时,错误日志显示[Warning]

lower_case_table_names was set to 2, even though your the file system ‘/home/mysql/master_a/data/‘ is case sensitive.

Now setting lower_case_table_names to 0 to avoid future problems.)

(2)变量更新

mysql> show variables like ‘lower%‘;

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

| Variable_name          | Value |

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

| lower_case_file_system | OFF   |

| lower_case_table_names | 0     |

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

2 rows in set (0.01 sec)

--修改发现变量为只读变量

mysql> set global lower_case_table_names=1;

ERROR 1238 (HY000): Variable ‘lower_case_table_names‘ is a read only variable

修改my.cnf后重启数据库

lower_case_table_names=1

mysql> show variables like ‘lower%‘;

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

| Variable_name          | Value |

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

| lower_case_file_system | OFF   |

| lower_case_table_names | 1     |

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

2 rows in set (0.01 sec)

因为修改了配置lower_case_table_names=1,原来在mysql的show tables里面有表的记录, select操作时会显示查不到表

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

| Tables_in_testdb          |

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

| TABLE1|

| TABLE2|

但是

mysql> select * from TABLE1;

ERROR 1146 (42S02): Table ‘testdb.TABLE1‘ doesn‘t exist

主要原因是大小写敏感以及文件系统以小写文件名写入,而原来的表名是大写的。

2、表字段数据大小写

表字段数据的校对,bin与cs区分大小写,ci不区分大小写

MySQL对校对约定的命名方式如下:

*_ci:case insensitive collation,不区分大小写

*_cs:case sensitive collation,区分大小写

*_bin: 表示的是binary case sensitive collation,将字符串每个字符串用二进制数据编译存储。 区分大小写,而且可以存二进制的内容

(1)表字段数据区分大小写

指定校对为区分大小写

mysql> create table b(id varchar(10)) default charset=utf8 default collate=utf8_bin;

Query OK, 0 rows affected (0.03 sec)sec)

mysql> insert into b values (‘A‘),(‘a‘),(‘B‘);

Query OK, 3 rows affected (0.02 sec)

Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from b where id like ‘a‘;

+------+

| id   |

+------+

| a    |

+------+

1 row in set (0.00 sec)

mysql> select id,count(*) from b group by id;

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

| id   | count(*) |

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

| A    |        1 |

| B    |        1 |

| a    |        1 |

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

3 rows in set (0.03 sec)

(2)表字段数据不区分大小写

指定校对为忽略大小写

mysql> create table t (name varchar(10)) default charset=utf8 default collate=utf8_general_ci;

Query OK, 0 rows affected (0.09 sec)

mysql> insert into t values(‘a‘),(‘A‘),(‘B‘),(‘b‘),(‘c‘);

Query OK, 5 rows affected (0.02 sec)

Records: 5  Duplicates: 0  Warnings: 0

mysql> select * from t where name like ‘a‘;

+------+

| name |

+------+

| a    |

| A    |

+------+

2 rows in set (0.01 sec)

mysql> select name,count(*) from t group by name;

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

| name | count(*) |

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

| a    |        2 |

| B    |        2 |

| c    |        1 |

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

3 rows in set (0.04 sec)

不过如果字段类型是binary则肯定会区分大小写

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

Query OK, 5 rows affected (0.08 sec)

Records: 5  Duplicates: 0  Warnings: 0

mysql> select * from t where name like ‘A‘;

+------+

| name |

+------+

| A    |

+------+

1 row in set (0.00 sec)

mysql> select name,count(*) from t group by name;

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

| name | count(*) |

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

| A    |        1 |

| B    |        1 |

| a    |        1 |

| b    |        1 |

| c    |        1 |

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

5 rows in set (0.01 sec)

时间: 2024-08-02 19:54:51

mysql的表的大小写区分的相关文章

windows下mysql数据库表名大小写不敏感

最近新入职,领导让做个小功能先练练手.是一个添加分类的功能,有添加和列表,很简单.功能做完后提交,结果在线上出现一个大大的500. 但是我再本地环境下是正常的,我以为可能是php的版本不一致导致的问题,就仔细看代码,看看有没有什么不合理的地方,然后在提交,还是500.然后又看,又提,依然是500.很不解啊,只有问领导了,领导说,是线上mysql字段设置了大小写敏感,遂改之,结果还是500.领导再一看,我靠了,表名应该是首字母大写的,但是我本地是小写. 大坑啊.原来开发创建的表都是小写的,所以原来

如何设置mysql的表不区分你大小写

Linux上安装MySQL默认是数据库的表大小写敏感的.修改很简单,只要该一个mysql的配置文件就可以了. mysql> show tables; +--------------------------------------+ | Tables_in_cddl                       | +--------------------------------------+ | a1_equipment                         | | a1_equipm

linux mysql不区分表名大小写配置

原来Linux下的MySQL默认是区分表名大小写的,通过如下设置,可以让MySQL不区分表名大小写:1.用root登录,修改 /etc/my.cnf:2.在[mysqld]节点下,加入一行: lower_case_table_names=1(值为0时区分大小写)3.重启MySQL即可: MySQL在Linux下数据库名.表名.列名.别名大小写规则是这样的:1)数据库名与表名是严格区分大小写的:2)表的别名是严格区分大小写的:3)列名与列的别名在所有的情况下均是忽略大小写的:4)变量名也是严格区分

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

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

docker mysql 数据持久化到本地、设置不区别表名大小写

Docker MySQL 把数据存储在本地目录,很简单,只需要映射本地目录到容器即可 1.加上-v参数 $ docker run -d -e MYSQL_ROOT_PASSWORD=admin --name mysql -v /data/mysql/data:/var/lib/mysql -p 3306:3306 mysql 还可以指定配置文件 docker run -d -e MYSQL_ROOT_PASSWORD=admin --name mysql -v /data/mysql/my.cn

linux下mysql表名大小写问题

近日,新mysql实例导入sql数据时,发现比老的mysql多了100+张表,最终发现是mysql表名大小写所致:很简单的问题却耽误很长时间,在此记录一下,以防再犯同样的错误: 1.Linux下mysql安装完后是默认:区分表名的大小写,不区分列名的大小写:2.用root帐号登录后,在/etc/my.cnf中的[mysqld]后添加添加lower_case_table_names=1,重启MYSQL服务,这时已设置成功:不区分表名的大小写:lower_case_table_names参数详解:l

Linux环境下MySQL数据库大小写区分问题

1.Linux下MySQL安装完后是默认:区分表名的大小写,不区分列名的大小写:2.用root帐号登录后,在/etc/my.cnf 中的[mysqld]后添加添加lower_case_table_names=1,重启MYSQL服务,这时已设置成功:不区分表名的大小写:lower_case_table_names参数详解:lower_case_table_names = 0其中 0:区分大小写,1:不区分大小写MySQL在Linux下数据库名.表名.列名.别名大小写规则是这样的:1.数据库名与表名

设置centos7中的mysql5.7不区分表名大小写有关操作

1.#which mysqld          //查看mysql的命令路径 /usr/sbin/mysqld 2.#/usr/sbin/mysqld --verbose --help | grep -A 1 'Default options'       //查看mysql读取的默认配置文件位置 /etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf (多个配置文件,前面的文件不存在才会读取后面的) 3.#vim /etc/my.cnf

[转]mysql在windows下支持表名大小写,lower_case_table_names

windows下mysql默认是不支表名大小写的,也就是表名大小写不敏感.用phpmyadmin创建的驼峰式表名,全部被强制成小写.mysql表名大小写敏感的参数: lower_case_table_names. 在[mysqld]下加上lower_case_table_names=0即可. ### [mysqld] lower_case_table_names=0 ### win下默认值为1,就是说mysql会把表名主动lower. [转]mysql在windows下支持表名大小写,lower