MySQL数据库怎么让他不区分数据库巨细写,数据库巨细写不敏感 ...

打印 上一主题 下一主题

主题 765|帖子 765|积分 2297

#1024步调员节 | 征文#

   在docker中的MySQL容器,怎么让他不区分数据库巨细写,数据库巨细写不敏感
  

媒介

假如你的是docker的MySQL容器,在启动运行容器时,没有指定。
唯一的办理办法,就是重新运行一个新的容器。
当前既然有唯一,也有唯二,不过,这个办理办法,就不建议了,由于容器重新启动就失效了。
在此之前,你可以先查询你的lower_case_table_names 的值是什么?
查询lower_case_table_names 的值

  1. SHOW VARIABLES LIKE 'lower_case_table_names';
复制代码


  • 查询数据库是否支持巨细写
  • lower_case_table_names 被设置为 1,即表名不区分巨细写。
  • 假如值为 1,则表示表名和列名在 MySQL 中不区分巨细写。
  • 假如值为 0 或 2,则表示表名和列名在 MySQL 中区分巨细写。
查询版本mysql的版本信息

  1. SELECT VERSION();
复制代码
更详细查看版本的方法请看文章:
我docker拉取mysql镜像时用的是latest,我该怎么看我的镜像版本是多少?可以通过一下三种方法查看
docker里的mysql容器,默认的日记文件和数据库文件放在什么位置

请看文章:docker里的mysql容器,默认的日记文件和数据库文件放在什么位置?并且可以通过sql命令查看
(唯二办法1)设置全局变量-直接使用命令设置不区分巨细写

强制执行
  1. SET GLOBAL lower_case_table_names=1;
复制代码
会提示提示
  1. SET GLOBAL lower_case_table_names=1
  2. > 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:
  1. SET @@global.lower_case_table_names = 1;
复制代码
但是请注意,这个设置在 MySQL 服务重启后会规复为默认值。

1.直接安装的MySQL数据库,不区分巨细写办理办法

MySQL 的设置文件my.cnf 或my.ini来设置,lower_case_table_names 的值为1
  1. [mysqld]
  2. lower_case_table_names=1
复制代码
查询lower_case_table_names 的值

  1. SHOW VARIABLES LIKE 'lower_case_table_names';
复制代码


  • 查询数据库是否支持巨细写
  • lower_case_table_names 被设置为 1,即表名不区分巨细写。
  • 假如值为 1,则表示表名和列名在 MySQL 中不区分巨细写。
  • 假如值为 0 或 2,则表示表名和列名在 MySQL 中区分巨细写。
my.cnf 或my.ini在什么位置

我是在根目录下,我的系统是windows10;
截图如下:

my.ini内容如下

  1. [mysql]
  2. default-character-set=utf8
  3. [mysqld]
  4. port=3306
  5. basedir=D:/CodeTools/phpstudy_pro/Extensions/MySQL5.7.26/
  6. datadir=D:/CodeTools/phpstudy_pro/Extensions/MySQL5.7.26/data/
  7. character-set-server=utf8
  8. default-storage-engine=MyIsam
  9. max_connections=100
  10. collation-server=utf8_unicode_ci
  11. init_connect='SET NAMES utf8'
  12. innodb_buffer_pool_size=64M
  13. innodb_flush_log_at_trx_commit=1
  14. innodb_lock_wait_timeout=120
  15. innodb_log_buffer_size=4M
  16. innodb_log_file_size=256M
  17. interactive_timeout=120
  18. join_buffer_size=2M
  19. key_buffer_size=32M
  20. log_error_verbosity=1
  21. max_allowed_packet=16M
  22. max_heap_table_size=64M
  23. myisam_max_sort_file_size=64G
  24. myisam_sort_buffer_size=32M
  25. read_buffer_size=512kb
  26. read_rnd_buffer_size=4M
  27. server_id=1
  28. skip-external-locking=on
  29. sort_buffer_size=256kb
  30. table_open_cache=256
  31. thread_cache_size=16
  32. tmp_table_size=64M
  33. wait_timeout=120
  34. [client]
  35. port=3306
  36. default-character-set=utf8
复制代码

2.宝塔的mysql数据库的 my.cnf 或my.ini在什么位置

MySQL的设置文件通常位于/etc/my.cnf或者/etc/mysql/my.cnf中。
你也可以通过命令搜刮
  1. 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 镜像启动容器,使用环境变量,让数据库不区分巨细写

运行命令
  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 命令来实现。
  1. docker run --name some-mysql \           -e MYSQL_ROOT_PASSWORD=my-secret-pw \           -e MYSQL_INIT_COMMAND="SET GLOBAL lower_case_table_names=1;
  2. " \           -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 文件的内容
  1. [mysqld]
  2. lower_case_table_names=1
复制代码
4.2.2.启动 Docker 容器 使用 -v 参数挂载设置文件到容器内:

  1. 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 的值来验证设置是否生效:
  1. docker exec -it some-mysql mysql -uroot -p
复制代码


  • 在这个命令中,some-mysql 是容器的名称,mysql -uroot -p 是用来连接 MySQL 数据库的命令。
  • 运行这个命令后,你就可以执行sql语句了。
运行命令结果如下
  1. C:\Users\Administrator>docker exec -it mysqltest mysql -uroot -p
  2. Enter password:
复制代码
直接输入暗码即可;
这里需要输入暗码,我的暗码是123465
这里你输入暗码的动作是看不见的,不过没关系,直接输入即可;
运行命令结果如下
  1. C:\Users\Administrator>docker exec -it mysqltest mysql -uroot -p
  2. Enter password:
  3. Welcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 178Server version: 9.0.1 MySQL Community Server - GPLCopyright (c) 2000, 2024, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>
复制代码
执行以下命令-查询状态:

  1. SHOW VARIABLES LIKE 'lower_case_table_names';
复制代码


  • 查询数据库是否支持巨细写
  • lower_case_table_names 被设置为 1,即表名不区分巨细写。
  • 假如值为 1,则表示表名和列名在 MySQL 中不区分巨细写。
  • 假如值为 0 或 2,则表示表名和列名在 MySQL 中区分巨细写。
    不过这些状态,在我测试中好像是不一样的。
    我的是windows系统,他显示的就是2,但不区分巨细写。
执行查询数据库表的命令-进行验证:

  1. use mysql;
  2. SELECT * FROM db;
  3. use mysql;
  4. SELECT * FROM DB;
复制代码
这里查是数据库默认表,
直接sql后,假如可以正常显示表数据,则为正常;
截图如下:
图1

图2


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

南七星之家

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表