Mysql "like" 返回意外结果

Mysql "like" returning unexpected results

我正在创建一个 MySQL 查询以获取仅包含指定字符串的所有 table 的大小。

我正在使用下面的代码:

SELECT
TABLE_NAME AS `Table`,
(((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024)) AS `Size (MB)`
FROM information_schema.TABLES
WHERE TABLE_SCHEMA ='Servername' AND
(TABLE_NAME LIKE '%log_%' OR TABLE_NAME LIKE '%_log%')
GROUP BY  TABLE_SCHEMA
ORDER BY TABLE_SCHEMA;

Expected Output
--------------------
Table     Size (MB)
--------------------
login_log 10.0005
log_login 00.8800

Resulting Output
--------------------
Table     Size (MB)
--------------------
login_log 10.0005
login     05.000
log_login 00.8800

在上面的结果中,login table 不是必需的,但 MySQL 正在返回它。我怎样才能避免这种情况只得到那些包含指定字符串的 tables?

您的下划线 _ 也充当通配符,表示任何字符。

您可以通过使用反斜杠字符 \:

转义 SQL 语句中的下划线来修复它
(TABLE_NAME LIKE '%log\_%' OR TABLE_NAME LIKE '%\_log%')

您可以使用类似于以下查询的内容:

SELECT
TABLE_NAME AS `Table`,
(((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024)) AS `Size (MB)`
FROM information_schema.TABLES
WHERE TABLE_SCHEMA ='Servername' AND
(TABLE_NAME LIKE '%\_log' OR TABLE_NAME LIKE 'log\_%')
GROUP BY  TABLE_SCHEMA
ORDER BY TABLE_SCHEMA;

输出如下:

Table     Size (MB)
--------------------
login_log 10.0005
log_login 00.8800