Bug #121068 NO_BACKSLASH_ESCAPES + UNION + escaped apostrophe raises error
Submitted: 7 Aug 22:26
Reporter: Junwen An Email Updates:
Status: Open Impact on me:
None 
Category:MySQL Server Severity:S3 (Non-critical)
Version:9.7.2, 8.4.10 OS:Ubuntu
Assigned to: CPU Architecture:ARM

[7 Aug 22:26] Junwen An
Description:
Please see the repro below. It seems this query pattern causes inconsistent behavior with strings like o'brien.

How to repeat:
-- ========== FAIL ==========
SET sql_mode = 'NO_BACKSLASH_ESCAPES';
SELECT * FROM (SELECT 'x' AS c UNION ALL SELECT 'y') AS t
WHERE c = 'o''brien';
-- ERROR 1064 near 'brien')'

-- ========== OK: drop NO_BACKSLASH_ESCAPES ==========
SET sql_mode = '';
SELECT * FROM (SELECT 'x' AS c UNION ALL SELECT 'y') AS t
WHERE c = 'o''brien';
-- empty result (correct)

-- ========== OK: drop UNION ==========
SET sql_mode = 'NO_BACKSLASH_ESCAPES';
SELECT * FROM (SELECT 'x' AS c) AS t
WHERE c = 'o''brien';
-- empty result (correct)

-- ========== OK: literal alone under the same mode ==========
SET sql_mode = 'NO_BACKSLASH_ESCAPES';
SELECT 'o''brien' AS v, LENGTH('o''brien') AS n;
-- v = o'brien, n = 7

Suggested fix:
The UNION rewrite under NO_BACKSLASH_ESCAPES corrupts 'o''brien' into something like 'o'brien' (string ends early)?