-- This example searches for the exact number 23 in a list of numbers -- under the "ids" key in a JSON object stored as a string. -- Ensure collation of connection is same as database else setting of user -- variables may yield "Illegal mix of collations" error, especially if -- database uses case-sensitive collation -- Note that @@SESSION.collation_database may be different -- from @@GLOBAL.collation_database SET collation_connection = (SELECT @@SESSION.collation_database); SHOW VARIABLES LIKE 'collation%'; -- If collation not set above, COLLATE must be used when setting string -- variables, e.g.: SET @MY_VAR = 'my value' COLLATE utf8mb4_0900_as_cs SET @PATTERN = '"ids":(\\[|\\[[\\d,]*\\d+,)23(\\]|,\\d+[\\d,]*\\])'; -- Basic checks SELECT 1 AS answer, '{"ids":[23]}' REGEXP @PATTERN AS is_match; SELECT 0 AS answer, '' REGEXP @PATTERN AS is_match; SELECT 0 AS answer, '{"ids":[89],"test":[23]}' REGEXP @PATTERN AS is_match; -- Do not match numbers that contain the number being searched for SELECT 0 AS answer, '{"ids":[123]}' REGEXP @PATTERN AS is_match; SELECT 0 AS answer, '{"ids":[234]}' REGEXP @PATTERN AS is_match; -- Cater for numbers before and after the number being searched for SELECT 1 AS answer, '{"ids":[1,23,45]}' REGEXP @PATTERN AS is_match; SELECT 1 AS answer, '{"ids":[1,23]}' REGEXP @PATTERN AS is_match; SELECT 1 AS answer, '{"ids":[0,1,23]}' REGEXP @PATTERN AS is_match; SELECT 1 AS answer, '{"ids":[23,45]}' REGEXP @PATTERN AS is_match; SELECT 1 AS answer, '{"ids":[23,45,67]}' REGEXP @PATTERN AS is_match;