MySQL数据库怎么让他不区分数据库大小写,数据库大小写不敏感
MySQL数据库怎么让他不区分数据库大小写,数据库大小写不敏感
#1024程序员节 | 征文#
在docker中的MySQL容器,怎么让他不区分数据库大小写,数据库大小写不敏感

前言
如果你的是docker的MySQL容器,在启动运行容器时,没有指定。
唯一的解决办法,就是重新运行一个新的容器。
当前既然有唯一,也有唯二,不过,这个解决办法,就不建议了,因为容器重新启动就失效了。
在此之前,你可以先查询你的lower_case_table_names 的值是什么?
查询lower_case_table_names 的值
SHOW VARIABLES LIKE 'lower_case_table_names';
- 查询数据库是否支持大小写
- lower_case_table_names 被设置为
1,即表名不区分大小写。 - 如果值为
1,则表示表名和列名在 MySQL 中不区分大小写。 - 如果值为
0 或 2,则表示表名和列名在 MySQL 中区分大小写。
查询版本mysql的版本信息
SELECT VERSION();
更详细查看版本的方法请看文章:
我docker拉取mysql镜像时用的是latest,我该怎么看我的镜像版本是多少?可以通过一下三种方法查看
docker里的mysql容器,默认的日志文件和数据库文件放在什么位置
请看文章:docker里的mysql容器,默认的日志文件和数据库文件放在什么位置?并且可以通过sql命令查看
(唯二办法1)设置全局变量-直接使用命令设置不区分大小写
强制执行
SET GLOBAL lower_case_table_names=1;
会提示提示
SET GLOBAL lower_case_table_names=1
> 1238 - Variable 'lower_case_table_names' is a read only variable
- 在 MySQL 中,
lower_case_table_names是一个全局变量,但它在运行时是只读的,因此不能通过 SET GLOBAL 命令动态更改。这个变量需要在MySQL 服务启动时设置,通常是在 MySQL 的配置文件中设置。 - 如果你正在使用 MySQL 5.7 或更高版本,并且希望在 Docker 容器中设置
lower_case_table_names,最好的方法仍然是通过配置文件来实现。
(唯二办法2)设置数据字典的 lower_case_table_names
设置数据字典的 lower_case_table_names: 你可以通过 SQL 命令来设置数据字典的 lower_case_table_names:
SET @@global.lower_case_table_names = 1;
但是请注意,这个设置在 MySQL 服务重启后会恢复为默认值。
1.直接安装的MySQL数据库,不区分大小写解决办法
MySQL 的配置文件my.cnf 或my.ini来设置,lower_case_table_names 的值为1
[mysqld]
lower_case_table_names=1
查询lower_case_table_names 的值
SHOW VARIABLES LIKE 'lower_case_table_names';
- 查询数据库是否支持大小写
- lower_case_table_names 被设置为
1,即表名不区分大小写。 - 如果值为
1,则表示表名和列名在 MySQL 中不区分大小写。 - 如果值为
0 或 2,则表示表名和列名在 MySQL 中区分大小写。
my.cnf 或my.ini在什么位置
我是在根目录下,我的系统是windows10;
截图如下:
my.ini内容如下
[mysql]
default-character-set=utf8
[mysqld]
port=3306
basedir=D:/CodeTools/phpstudy_pro/Extensions/MySQL5.7.26/
datadir=D:/CodeTools/phpstudy_pro/Extensions/MySQL5.7.26/data/
character-set-server=utf8
default-storage-engine=MyIsam
max_connections=100
collation-server=utf8_unicode_ci
init_connect='SET NAMES utf8'
innodb_buffer_pool_size=64M
innodb_flush_log_at_trx_commit=1
innodb_lock_wait_timeout=120
innodb_log_buffer_size=4M
innodb_log_file_size=256M
interactive_timeout=120
join_buffer_size=2M
key_buffer_size=32M
log_error_verbosity=1
max_allowed_packet=16M
max_heap_table_size=64M
myisam_max_sort_file_size=64G
myisam_sort_buffer_size=32M
read_buffer_size=512kb
read_rnd_buffer_size=4M
server_id=1
skip-external-locking=on
sort_buffer_size=256kb
table_open_cache=256
thread_cache_size=16
tmp_table_size=64M
wait_timeout=120
[client]
port=3306
default-character-set=utf8
2.宝塔的mysql数据库的 my.cnf 或my.ini在什么位置
MySQL的配置文件通常位于/etc/my.cnf或者/etc/mysql/my.cnf中。
你也可以通过命令搜索
find / -name my.cnf
我在测试中它的位置是:/etc/my.cnf
3.docker的mysql容器的 my.cnf 或my.ini在什么位置
位置:/etc/mysql/my.cnf
- 在 MySQL 容器内部,默认的配置文件位置如下:
- 主配置文件通常位于
/etc/mysql/my.cnf。 - 可以放置额外的配置文件在
/etc/mysql/conf.d/目录下。 - 通过将你的配置文件挂载到
/etc/mysql/conf.d/目录,你可以轻松地覆盖默认的配置。
4.docker的mysql容器
4.1 镜像启动容器,使用环境变量,让数据库不区分大小写
运行命令
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_LOWER_CASE_TABLE_NAMES=1 -d mysql:5.7
some-mysql是容器名称-e MYSQL_LOWER_CASE_TABLE_NAMES=1设置了 MySQL 表名不区分大小写-e MYSQL_ROOT_PASSWORD=my-secret-pw设置了密码是my-secret-pw-d是后台运行mysql:5.7是容器名称和版本
需要注意
- 需要注意的是,从
MySQL 5.7开始,环境变量MYSQL_LOWER_CASE_TABLE_NAMES已经不再支持。取而代之的是,你应该通过配置文件来设置lower_case_table_names选项。 - 如果你仍然希望使用环境变量的方式来设置
lower_case_table_names,可以从MySQL 8.0开始,通过环境变量MYSQL_INIT_COMMAND来执行一条 SQL 命令来设置这个参数。这可以通过在容器启动时执行一条 SQL 命令来实现。
docker run --name some-mysql \
-e MYSQL_ROOT_PASSWORD=my-secret-pw \
-e MYSQL_INIT_COMMAND="SET GLOBAL lower_case_table_names=1;" \
-d mysql:5.7
这条命令将在 MySQL 启动时执行 SQL 命令 SET GLOBAL lower_case_table_names=1;,从而设置 lower_case_table_names 为 1,使得表名不区分大小写。
4.2【推荐】 镜像启动容器,挂载配置文件,让数据库不区分大小写
创建一个包含 my.cnf 文件的目录,并将该目录挂载到 Docker 容器中 MySQL 期望读取配置文件的位置。
4.2.1.创建配置文件 创建一个 my.cnf 文件,并设置 lower_case_table_names:
下面是my.cnf 文件的内容
[mysqld]
lower_case_table_names=1
4.2.2.启动 Docker 容器 使用 -v 参数挂载配置文件到容器内:
docker run --name some-mysql -v /path/to/your/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:5.7
some-mysql是容器名称-e MYSQL_ROOT_PASSWORD=my-secret-pw设置了密码是my-secret-pw-d是后台运行mysql:5.7是容器名称和版本-v /path/to/your/my.cnf:/etc/mysql/my.cnf:这里的/path/to/your/my.cnf是你主机上配置文件的位置,/etc/mysql/my.cnf是容器内 MySQL 查找配置文件的位置。
注意事项
- 当你使用
-v挂载配置文件时,请确保主机上的文件路径是正确的,并且文件具有正确的权限。 - 如果你在生产环境中使用这种方法,请确保你的容器有足够的权限访问挂载的卷,并且配置文件中的任何敏感信息都得到了妥善保护。
- 如果你使用的是 MySQL 的官方镜像,请参考官方文档以获取最新的配置方法和细节。
4.2.3.验证设置是否生效
启动容器后,你可以通过登录 MySQL 并查询 lower_case_table_names 的值来验证设置是否生效:
docker exec -it some-mysql mysql -uroot -p
- 在这个命令中,
some-mysql是容器的名称,mysql -uroot -p是用来连接 MySQL 数据库的命令。 - 运行这个命令后,你就可以执行sql语句了。
运行命令结果如下
C:\Users\Administrator>docker exec -it mysqltest mysql -uroot -p
Enter password:
直接输入密码即可;
这里需要输入密码,我的密码是123465
这里你输入密码的动作是看不见的,不过没关系,直接输入即可;
运行命令结果如下
C:\Users\Administrator>docker exec -it mysqltest mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 178
Server version: 9.0.1 MySQL Community Server - GPL
Copyright (c) 2000, 2024, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
执行以下命令-查询状态:
SHOW VARIABLES LIKE 'lower_case_table_names';
- 查询数据库是否支持大小写
- lower_case_table_names 被设置为
1,即表名不区分大小写。 - 如果值为
1,则表示表名和列名在 MySQL 中不区分大小写。 - 如果值为
0 或 2,则表示表名和列名在 MySQL 中区分大小写。
不过这些状态,在我测试中好像是不一样的。
我的是windows系统,他显示的就是2,但不区分大小写。
执行查询数据库表的命令-进行验证:
use mysql;
SELECT * FROM db;
use mysql;
SELECT * FROM DB;
这里查是数据库默认表,
直接sql后,如果可以正常显示表数据,则为正常;
截图如下:
图1
图2
更多推荐




所有评论(0)