首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从MYSQL迁移到Maria DB之后,查询返回结果集列名的不同情况。

从MYSQL迁移到Maria DB之后,查询返回结果集列名的不同情况。
EN

Server Fault用户
提问于 2019-12-27 17:49:35
回答 1查看 158关注 0票数 0

试图在一个新的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下的一个测试案例

代码语言:javascript
复制
select cname from (select s.CName from (select 'A' as CNAME) s) t;

在MariaDB下,结果集列大小写与中间临时表中的列匹配。

使用同样的查询使用源mysql数据库,

结果集列名的大小写与select语句中的大小写匹配

EN

回答 1

Server Fault用户

发布于 2019-12-27 23:07:11

(感谢完整的测试用例。)

不同的优化者:

代码语言:javascript
复制
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 |
+-----------------+

对比

代码语言:javascript
复制
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上处理得更好。)

但甲骨文确实在某一时刻赶上了:

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/996900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档