Debian mariadb 10.11设定表名 大小写不敏感方法

目录

[问题表现:应用中查询 表提示 表不存在](#问题表现:应用中查询 表提示 表不存在)

处理步骤:

[1、查询表名大小写敏感情况: show global variables like '%case%';](#1、查询表名大小写敏感情况: show global variables like '%case%';)

[2、修改mariadb 配置设置大小写 不敏感](#2、修改mariadb 配置设置大小写 不敏感)

[mysql 配置大小写不敏感](#mysql 配置大小写不敏感)

[mariadb 10.11设置表名大小写不敏感](#mariadb 10.11设置表名大小写不敏感)

[/etc/mysql/mariadb.conf.d/ 目录下的文件](#/etc/mysql/mariadb.conf.d/ 目录下的文件)

[总结:在mariadb 10.11以及以后的版本中,要配置表名大小写敏感问题,一般修改修改配置文件:/etc/mysql/mariadb.conf.d/50-server.cnf 在 [mysqld] 段 添加属性:lower_case_table_names=1 然后重启服务](#总结:在mariadb 10.11以及以后的版本中,要配置表名大小写敏感问题,一般修改修改配置文件:/etc/mysql/mariadb.conf.d/50-server.cnf 在 [mysqld] 段 添加属性:lower_case_table_names=1 然后重启服务)


问题表现:应用中查询 表提示 表不存在

问题处理办法: 1、先确认表存在,然后再确认数据库中表名的大小写。与mysql 一致再 mariadb中:

lower_case_file_system:表示当前系统文件是否大小写敏感(ON为不敏感,OFF为敏感),只读参数,无法修改。
lower_case_table_names:表示表名是否大小写敏感,可以修改。
lower_case_table_names = 0时,mysql会根据表名直接操作,大小写敏感
lower_case_table_names = 1时,大小写不敏感,mysql会先把表名转为小写,再执行操作。

处理步骤:

1、查询表名大小写敏感情况: show global variables like '%case%';

2、mariadb 配置设置大小写 不敏感

mariadb虽说与mysql类似,但是从mariadb 10.11开始,与mysql配置是有明显区别的(至少我这里看到是这样,具体哪个版本开始不一样,我也不知道...)

mysql 配置大小写不敏感

mysql 配置大小写不敏感操作如下:实际上以前版本的mariadb也可以这样做:

vi /etc/my.cnf 通过配置文件/etc/my.cnf下的【mysqld】添加如下内容:

|--------------------------|
| lower_case_table_names=1 |

设置好之后,重启数据库服务。

mariadb 10.11设置表名大小写不敏感

在 debian 12环境中,mariadb 10.11已经没有 /etc/my.cnf配置文件了 :

通过find / -name my.cnf 可以查询到 :

配置文件变成了:/etc/mysql/my.cnf

查看配置文件:/etc/mysql/my.cnf

可以发现内容如下:

The MariaDB configuration file

The MariaDB/MySQL tools read configuration files in the following order:

0. "/etc/mysql/my.cnf" symlinks to this file, reason why all the rest is read.

1. "/etc/mysql/mariadb.cnf" (this file) to set global defaults,

2. "/etc/mysql/conf.d/*.cnf" to set global options.

3. "/etc/mysql/mariadb.conf.d/*.cnf" to set MariaDB-only options.

4. "~/.my.cnf" to set user-specific options.

If the same option is defined multiple times, the last one will apply.

One can use all long options that the program supports.

Run program with --help to get a list of available options and with

--print-defaults to see which it would actually understand and use.

If you are new to MariaDB, check out https://mariadb.com/kb/en/basic-mariadb-articles/

This group is read both by the client and the server

use it for options that affect everything

[client-server]

Port or socket location where to connect

port = 3306

socket = /run/mysqld/mysqld.sock

[mysqld]

lower_case_table_names=1

Import all .cnf files from configuration directory

!includedir /etc/mysql/conf.d/

!includedir /etc/mysql/mariadb.conf.d/

关键信息:**# The MariaDB/MySQL tools read configuration files in the following order:

0. "/etc/mysql/my.cnf" symlinks to this file, reason why all the rest is read.

1. "/etc/mysql/mariadb.cnf" (this file) to set global defaults,

2. "/etc/mysql/conf.d/*.cnf" to set global options.

3. "/etc/mysql/mariadb.conf.d/*.cnf" to set MariaDB-only options.

4. "~/.my.cnf" to set user-specific options.**

可以看到 读取的配置文件顺序为:

1、 /etc/mysql/my.cnf、

2、/etc/mysql/mariadb.cnf、

3、/etc/mysql/conf.d/*.cnf

4、/etc/mysql/mariadb.conf.d/ 以及 ~/.my.cnf

结合说明,可以发现 以往的

[mysqld]
lower_case_table_names=1 在 /etc/mysql/my.cnf 是没有生效的。

查看其他配置文件:cat /etc/mysql/mariadb.cnf

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| cat /etc/mysql/mariadb.cnf # The MariaDB configuration file # # The MariaDB/MySQL tools read configuration files in the following order: # 0. "/etc/mysql/my.cnf" symlinks to this file, reason why all the rest is read. # 1. "/etc/mysql/mariadb.cnf" (this file) to set global defaults, # 2. "/etc/mysql/conf.d/*.cnf" to set global options. # 3. "/etc/mysql/mariadb.conf.d/*.cnf" to set MariaDB-only options. # 4. "~/.my.cnf" to set user-specific options. # # If the same option is defined multiple times, the last one will apply. # # One can use all long options that the program supports. # Run program with --help to get a list of available options and with # --print-defaults to see which it would actually understand and use. # # If you are new to MariaDB, check out https://mariadb.com/kb/en/basic-mariadb-articles/ # # This group is read both by the client and the server # use it for options that affect everything # [client-server] # Port or socket location where to connect port = 3306 socket = /run/mysqld/mysqld.sock [mysqld] lower_case_table_names=1 # Import all .cnf files from configuration directory !includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mariadb.conf.d/ |

可以看到 在 /etc/mysql/mariadb.cnf 中设置 [mysqld]
lower_case_table_names=1 也是无效的。

查看其他配置文件:

在/etc/mysql/conf.d文件夹下有:mysql.cnf 以及 mysqldump.cnf

cat mysql.cnf

可见:mysql段的设定单独提取到了:/etc/mysql/conf.d/mysql.cnf 里:

尝试 在**/etc/mysql/conf.d/mysql.cnf**里加上 lower_case_table_names=1 :

然后重启 mariadb 服务再验证:

直接报错:mysql: unknown variable 'lower_case_table_names=1' 可见这种方式也不行。需要把配置文件 /etc/mysql/conf.d/mysql.cnf还原回来。

/etc/mysql/mariadb.conf.d/ 目录下的文件

先看一下 /etc/mysql/mariadb.conf.d/ 目录下的文件:

实在不知道 文件用处,直接cat 查看,比如,当前我使用的这个mariadb 10.11的版本

50-client.cnf文件内容:

This group is read by the client library

Use it for options that affect all clients, but not the server

[client]

Example of client certificate usage

#ssl-cert = /etc/mysql/client-cert.pem

#ssl-key = /etc/mysql/client-key.pem

Allow only TLS encrypted connections

#ssl-verify-server-cert = on

This group is *never* read by mysql client library, though this

/etc/mysql/mariadb.cnf.d/client.cnf file is not read by Oracle MySQL

client anyway.

If you use the same .cnf file for MySQL and MariaDB,

use it for MariaDB-only client options

[client-mariadb]

default-character-set=utf8mb4

50-server.cnf 文件内容如下:

These groups are read by MariaDB server.

Use it for options that only the server (but not clients) should see

this is read by the standalone daemon and embedded servers

[server]

this is only for the mysqld standalone daemon

[mysqld]

* Basic Settings

#user = mysql

pid-file = /run/mysqld/mysqld.pid

basedir = /usr

#datadir = /var/lib/mysql

#tmpdir = /tmp

Broken reverse DNS slows down connections considerably and name resolve is

safe to skip if there are no "host by domain name" access grants

#skip-name-resolve

Instead of skip-networking the default is now to listen only on

localhost which is more compatible and is not less secure.

bind-address = 127.0.0.1

* Fine Tuning

#key_buffer_size = 128M

#max_allowed_packet = 1G

#thread_stack = 192K

#thread_cache_size = 8

This replaces the startup script and checks MyISAM tables if needed

the first time they are touched

#myisam_recover_options = BACKUP

#max_connections = 100

#table_cache = 64

* Logging and Replication

Note: The configured log file or its directory need to be created

and be writable by the mysql user, e.g.:

$ sudo mkdir -m 2750 /var/log/mysql

$ sudo chown mysql /var/log/mysql

Both location gets rotated by the cronjob.

Be aware that this log type is a performance killer.

Recommend only changing this at runtime for short testing periods if needed!

#general_log_file = /var/log/mysql/mysql.log

#general_log = 1

When running under systemd, error logging goes via stdout/stderr to journald

and when running legacy init error logging goes to syslog due to

/etc/mysql/conf.d/mariadb.conf.d/50-mysqld_safe.cnf

Enable this if you want to have error logging into a separate file

#log_error = /var/log/mysql/error.log

Enable the slow query log to see queries with especially long duration

#log_slow_query_file = /var/log/mysql/mariadb-slow.log

#log_slow_query_time = 10

#log_slow_verbosity = query_plan,explain

#log-queries-not-using-indexes

#log_slow_min_examined_row_limit = 1000

The following can be used as easy to replay backup logs or for replication.

note: if you are setting up a replication slave, see README.Debian about

other settings you may need to change.

#server-id = 1

#log_bin = /var/log/mysql/mysql-bin.log

expire_logs_days = 10

#max_binlog_size = 100M

* SSL/TLS

For documentation, please read

https://mariadb.com/kb/en/securing-connections-for-client-and-server/

#ssl-ca = /etc/mysql/cacert.pem

#ssl-cert = /etc/mysql/server-cert.pem

#ssl-key = /etc/mysql/server-key.pem

#require-secure-transport = on

* Character sets

MySQL/MariaDB default is Latin1, but in Debian we rather default to the full

utf8 4-byte character set. See also client.cnf

character-set-server = utf8mb4

collation-server = utf8mb4_general_ci

* InnoDB

InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.

Read the manual for more InnoDB related options. There are many!

Most important is to give InnoDB 80 % of the system RAM for buffer use:

https://mariadb.com/kb/en/innodb-system-variables/#innodb_buffer_pool_size

#innodb_buffer_pool_size = 8G

this is only for embedded server

[embedded]

This group is only read by MariaDB servers, not by MySQL.

If you use the same .cnf file for MySQL and MariaDB,

you can put MariaDB-only options here

[mariadb]

This group is only read by MariaDB-10.11 servers.

If you use the same .cnf file for MariaDB of different versions,

use this group for options that older servers don't understand

[mariadb-10.11]

发现在 50-server.cnf文件中 有 [mysqld] 段的配置,尝试把 表名 大小写 敏感设定写在这里:

即:/etc/mysql/mariadb.conf.d/50-server.cnf

然后重启: systemctl restart mariadb

再登录,查看表名大小写敏感设置: show global variables like '%case%';

总结:在mariadb 10.11以及以后的版本中,要配置表名大小写敏感问题,一般修改修改配置文件: /etc/mysql/mariadb.conf.d/50-server.cnf 在 [mysqld] 段 添加属性:lower_case_table_names=1 然后重启服务

相关推荐
White_Mountain6 分钟前
在Ubuntu中配置mysql,并允许外部访问数据库
数据库·mysql·ubuntu
Code apprenticeship7 分钟前
怎么利用Redis实现延时队列?
数据库·redis·缓存
百度智能云技术站10 分钟前
广告投放系统成本降低 70%+,基于 Redis 容量型数据库 PegaDB 的方案设计和业务实践
数据库·redis·oracle
装不满的克莱因瓶13 分钟前
【Redis经典面试题六】Redis的持久化机制是怎样的?
java·数据库·redis·持久化·aof·rdb
梦想平凡2 小时前
PHP 微信棋牌开发全解析:高级教程
android·数据库·oracle
TianyaOAO2 小时前
mysql的事务控制和数据库的备份和恢复
数据库·mysql
Ewen Seong2 小时前
mysql系列5—Innodb的缓存
数据库·mysql·缓存
码农老起3 小时前
企业如何通过TDSQL实现高效数据库迁移与性能优化
数据库·性能优化
夏木~4 小时前
Oracle 中什么情况下 可以使用 EXISTS 替代 IN 提高查询效率
数据库·oracle
W21554 小时前
Liunx下MySQL:表的约束
数据库·mysql