Мы пытались перенести серверы mysql на MariaDB на новом экземпляре AWS (amazon-linux-2). После создания нового экземпляра и установки mariadb мы сбросили старую базу данных через mysqldump ... --add-drop-database --triggers --routines --events
и импортированы в новую систему с помощью mysql -u ... < dump.sql
В базе данных есть таблица, определенная со смесью столбцов верхнего и нижнего регистра, например COLUMN1,COLUMN2,column3,etc
Исходная база данных через mysqld -V
, является mysqld Ver 14.14 Distrib 5.5.62, for Linux (x86_64)
Новая база данных через mysqld -V
, является mysqld Ver 15.1 Distrib 5.5.64-MariaDB, for Linux (x86_64)
установлен с yum install mariadb-server
Я проверил соответствие столбцов схемы рассматриваемой таблице.
Запрос таблицы с помощью оператора select, запрашивающего столбцы в нижнем регистре. (Я подключил локальное приложение и протестировал выполнение одного и того же запроса для обеих баз данных)
например SELECT column1,column2,column3,etc from TABLE1 where ..
Результаты запроса из исходной базы данных учитывают регистр в операторе «select», однако в новой базе данных mariadb результаты запроса соответствуют регистру столбца, как определено в таблице.
Можно ли применить параметр, который заставит имена столбцов результата соответствовать регистру в операторе «SELECT» и, следовательно, привести к совпадению имен столбцов результата, возвращаемых одним и тем же оператором select в обеих базах данных?
Тестовый пример под MariaDB и Mysql
select cname from (select s.CName from (select 'A' as CNAME) s) t;
В MariaDB корпус столбца набора результатов соответствует столбцу из промежуточной временной таблицы.
С тем же запросом с использованием исходной базы данных mysql,
Оболочка имени столбца набора результатов совпадает с регистром в операторе выбора
(Спасибо за полный тестовый пример.)
Различные оптимизаторы:
mysql> explain
-> select cname from (select s.CName from (select 'A' as CNAME) s) t;
+----+-------------+------------+--------+---------------+------+---------+------+------+----------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------+--------+---------------+------+---------+------+------+----------------+
| 1 | PRIMARY | <derived2> | system | NULL | NULL | NULL | NULL | 1 | NULL |
| 2 | DERIVED | <derived3> | system | NULL | NULL | NULL | NULL | 1 | NULL |
| 3 | DERIVED | NULL | NULL | NULL | NULL | NULL | NULL | NULL | No tables used |
+----+-------------+------------+--------+---------------+------+---------+------+------+----------------+
3 rows in set (0.01 sec)
mysql> select @@version;
+-----------------+
| @@version |
+-----------------+
| 5.6.22-71.0-log |
+-----------------+
против
mysql> explain
-> select cname from (select s.CName from (select 'A' as CNAME) s) t;
+------+-------------+------------+--------+---------------+------+---------+------+------+----------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+------+-------------+------------+--------+---------------+------+---------+------+------+----------------+
| 1 | PRIMARY | <derived3> | system | NULL | NULL | NULL | NULL | 1 | |
| 3 | DERIVED | NULL | NULL | NULL | NULL | NULL | NULL | NULL | No tables used |
+------+-------------+------------+--------+---------------+------+---------+------+------+----------------+
2 rows in set (0.00 sec)
mysql> select @@version;
+--------------------------------------+
| @@version |
+--------------------------------------+
| 10.4.1-MariaDB-1:10.4.1+maria~bionic |
+--------------------------------------+
Обратите внимание, как MariaDB была достаточно умен, чтобы отбросить один слой вашего запроса.
(Вопросы MySQL / MariaDB лучше решать на stackoverflow.com или dba.stackexchange.com.)
Но в какой-то момент Oracle все же догнал:
mysql> select cname from (select s.CName from (select 'A' as CNAME) s) t;
+-------+
| CName |
+-------+
| A |
+-------+
1 row in set (0.00 sec)
mysql> explain
-> select cname from (select s.CName from (select 'A' as CNAME) s) t;
+----+-------------+------------+------------+--------+---------------+------+---------+------+------+----------+----------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+------------+------------+--------+---------------+------+---------+------+------+----------+----------------+
| 1 | PRIMARY | <derived3> | NULL | system | NULL | NULL | NULL | NULL | 1 | 100.00 | NULL |
| 3 | DERIVED | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | No tables used |
+----+-------------+------------+------------+--------+---------------+------+---------+------+------+----------+----------------+
2 rows in set, 1 warning (0.00 sec)
mysql> select @@version;
+-----------+
| @@version |
+-----------+
| 8.0.17 |
+-----------+
1 row in set (0.00 sec)