MySQL 5.7.13 的一个BUG

mysql今天从5.6切到5.7,在测试环境中,日志是全部打印的,发现打了一个警告:

Incorrect string value: '\xD6\xD0\xB9\xFA\xB1\xEA...' for column 'VARIABLE_VALUE' at row 478

于是,谷歌之后发现答案全都是说插入数据时编码错误,然而我并没有插入数据,只是查询数据,而且网上说的那些配置修改早就修改好了。

累觉不爱,但是本着程序员精神,蛋疼了一会儿后继续谷歌,并且研究日志,发现只要执行 SHOW VARIABLES LIKE 'XXX'的命令就会打印一个警告。

在mysql客户端也验证了这个问题,找到了原因,于是再谷歌,发现了bug report:https://bugs.mysql.com/bug.php?id=82414

[2 Aug 16:01] Lowe Ryan
Description:
> SHOW CREATE TABLE INFORMATION_SCHEMA.GLOBAL_VARIABLES\G
*************************** 1. row ***************************
       Table: GLOBAL_VARIABLES
Create Table: CREATE TEMPORARY TABLE `GLOBAL_VARIABLES` (
  `VARIABLE_NAME` varchar(64) NOT NULL DEFAULT '',
  `VARIABLE_VALUE` varchar(1024) DEFAULT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

When I set log_bin as follows:

log-bin=💩

It correctly sets the files on disk:

-rw-rw----   1 rlowe  1278   174B Aug  2 08:34 💩.000001
-rw-rw----   1 rlowe  1278   174B Aug  2 08:40 💩.000002
-rw-rw----   1 rlowe  1278   151B Aug  2 08:53 💩.000003
-rw-rw----   1 rlowe  1278    42B Aug  2 08:53 💩.index

But I cannot accurately retrieve log_bin_basename:

> SHOW GLOBAL VARIABLES LIKE 'log_bin_basename';
+------------------+-----------------------------------------------------------+
| Variable_name    | Value                                                     |
+------------------+-----------------------------------------------------------+
| log_bin_basename | /Users/rlowe/sandboxes/rsandbox_mysql-5_6_23/master/data/ |
+------------------+-----------------------------------------------------------+
1 row in set, 1 warning (0.00 sec)

> SHOW WARNINGS;
+---------+------+---------------------------------------------------------------------------------+
| Level   | Code | Message                                                                         |
+---------+------+---------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9F\x92\xA9' for column 'VARIABLE_VALUE' at row 1 |
+---------+------+---------------------------------------------------------------------------------+
1 row in set (0.00 sec)

How to repeat:
Follow the steps above

Suggested fix:
Disallow utf8mb4 characters when setting log_bin OR change the character set of GLOBAL_VARIABLES
[2 Aug 16:20] Umesh Umesh
Hello Lowe Ryan,

Thank you for the report.

Thanks,
Umesh

 

此致,敬礼

 

虽然没有什么用,但一种爽的感觉悠然而生,我想这就是程序员精神。

posted @ 2016-10-28 18:21  彭玉松  阅读(7357)  评论(0编辑  收藏  举报