试图在一个新的AWS (amazon-linux-2)实例上将mysql服务器迁移到MariaDB。在创建了一个新实例并安装了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数据库,

结果集列名的大小写与select语句中的大小写匹配
发布于 2019-12-27 23:07:11
(感谢完整的测试用例。)
不同的优化者:
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上处理得更好。)
但甲骨文确实在某一时刻赶上了:
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)https://serverfault.com/questions/996900
复制相似问题