MySQL8.0配置group by不兼容、忽略表名大小写

说明:

1.已经安装完成MySQL、数据库已初始化。

2.开发用表已经导入、用户权限已经增加。

解决方案:

删除数据文件、增加忽略配置、重新导入数据。 

1.停止服务:

systemctl stop mysqld

 2.查看服务状态:

systemctl status mysqld

3.删除数据文件:

rm -rfv  /var/lib/mysql/*

4.修改my.cnf文件(/etc/my.cnf)最下面增加:

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
lower_case_table_names=1

 5.重新启动数据库:

systemctl start mysqld

 6.查看服务状态:

systemctl status mysqld

 7.获取默认密码:

grep "password" /var/log/mysqld.log

 此时应该会有两个密码,第一个是初始化时的密码,第二个是刚刚启动生成的,使用第二个

8.打开数据库:

mysql -u root -p

 9.修改密码:

alter user 'root'@'localhost' identified by '你的密码';

 10.创建新用户:

create user 'root'@'%' identified by '这里是你的密码';

 11.设置允许所有的IP连接数据库:

grant all privileges on *.* to 'root'@'%' with grant option;

12.刷新权限:

flush privileges

 

 

<think>好的,我现在需要帮助用户解决在MySQL 8中设置区分大小写配置,并允许在非聚合字段上进行分组操作的问题。首先,我得理清楚用户的具体需求。 用户提到了两个主要点:区分大小写配置和允许非聚合字段的分组查询。对于区分大小写MySQL默认的行为可能因操作系统而异,比如在Linux下通常是区分大小写的,而Windows区分。用户可能是在迁移数据库或者在同系统上遇到了大小写敏感的问题,需要统一配置。这时候我需要想到MySQL的lower_case_table_names参数,这个参数控制大小写敏感性。过根据引用2,MySQL 8在初始化后修改这个参数可能需要重新初始化数据目录,用户需要注意这一点。 接下来是允许非聚合字段的分组查询。通常标准SQL要求GROUP BY子句中的非聚合字段必须出现在SELECT列中,但MySQL对此有所扩展,允许非聚合字段GROUP BY中,这可能导致确定的结果。用户可能在使用GROUP BY时遇到了问题,或者希望了解如何配置以符合标准SQL模式。根据引用1,MySQL默认允许这样的查询,但可以通过SQL模式来控制,比如启用ONLY_FULL_GROUP_BY来禁止这种行为。用户可能希望关闭严格模式,允许非聚合字段的分组查询,所以需要调整sql_mode参数,移除ONLY_FULL_GROUP_BY。 接下来需要确认用户的具体操作步骤。设置区分大小写需要修改my.cnf或my.ini文件,添加lower_case_table_names=1,然后重启服务。但需要注意数据目录是否需要重新初始化。对于分组查询,需要检查当前的SQL模式,并移除ONLY_FULL_GROUP_BY,可能需要修改配置文件或者动态设置。 同时,用户可能存在的潜在问题包括:修改大小写配置后,现有是否需要更改?比如原来有大写字母的在修改后会被视为小写,可能会有冲突。另外,允许非聚合字段的分组查询可能导致查询结果稳定,用户需要了解其影响。 最后,需要提供验证步骤,比如创建测试,执行分组查询,检查是否生效。同时提醒用户注意事项,比如配置的持久化和潜在的数据影响。 总结步骤: 1. 设置区分大小写:修改配置文件,调整lower_case_table_names,重启服务。 2. 允许非聚合分组:调整sql_mode,移除ONLY_FULL_GROUP_BY。 3. 验证配置是否生效。 4. 提醒注意事项和潜在问题。</think>以下是MySQL 8中设置区分大小写配置和实现非聚合字段分组查询的完整操作指南: ### 一、设置区分大小写配置 1. **修改配置文件** 在`my.cnf`(Linux)或`my.ini`(Windows)的`[mysqld]`段添加: ```ini lower_case_table_names=1 collation_server=utf8_general_ci character_set_server=utf8 ``` 2. **生效配置的限制条件** - 此参数需在MySQL初始化前设置才能完全生效[^2] - 若已存在数据库,需备份数据后重新初始化(注意:修改后原大写可访问) 3. **验证配置** ```sql SHOW VARIABLES LIKE 'lower_case_table_names'; -- 应返回值为1 ``` ### 二、允许非聚合字段分组查询 1. **关闭严格模式** 修改配置文件: ```ini [mysqld] sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' ``` 2. **动态修改(临时生效)** ```sql SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')); ``` 3. **验证分组查询** ```sql CREATE TABLE test(id INT, name VARCHAR(20)); INSERT INTO test VALUES(1,'A'),(1,'B'),(2,'C'); -- 非聚合字段分组查询应成功执行 SELECT id, name FROM test GROUP BY id; ``` ### 三、注意事项 1. **数据字典兼容性** MySQL 8.0使用新的数据字典后,大小写修改需通过`ALTER TABLE`语句实现[^2] 2. **查询结果确定性** 非聚合字段分组可能返回随机结果,建议配合`ANY_VALUE()`函数使用: ```sql SELECT id, ANY_VALUE(name) FROM test GROUP BY id; ``` 3. **持久化配置** ```sql SET PERSIST sql_mode='修改后的模式'; SET PERSIST lower_case_table_names=1; -- 需要SUPER权限 ``` ### 四、配置影响对比 | 配置项 | 默认值 | 修改后值 | 功能影响 | |-------------------------|---------------|----------------|--------------------------------------------------------------------------| | lower_case_table_names | 0(Linux) | 1 | 存储为小写,查询区分大小写[^2] | | sql_mode | 包含严格模式 | 移除部分限制 | 允许非聚合字段分组查询,但可能降低数据严谨性[^1] |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜鸟叮咚糖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值