如何在数据库表中搜索排除匈牙利字母的特殊字符?
解决SQL正则表达式排序规则冲突问题
错误原因
你的列使用latin1_swedish_ci排序规则,但正则表达式中的匈牙利字符默认采用utf8mb4_general_ci排序规则,两者编码/排序规则不兼容,导致REGEXP操作报错。
解决方案
方案1:统一正则表达式的排序规则
将正则表达式字符串强制转换为与列一致的排序规则,确保匹配操作的编码兼容:
SELECT * FROM `table` T WHERE T.columnname REGEXP '[^a-zA-Z0-9 áéíóöőúüű]' COLLATE latin1_swedish_ci;
如果不确定列的排序规则,可先执行以下语句查询:
SHOW FULL COLUMNS FROM `table` LIKE 'columnname';
方案2:修改列的排序规则为utf8mb4(推荐)
将列的字符集和排序规则改为支持Unicode的utf8mb4系列,不仅能解决当前冲突,还能更好支持匈牙利语等非英文字符:
ALTER TABLE `table` MODIFY COLUMN columnname VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_hungarian_ci;
注意:替换语句中的VARCHAR(255)为你字段实际的长度;utf8mb4_hungarian_ci是针对匈牙利语优化的排序规则,比通用的utf8mb4_general_ci更适配需求。修改完成后,原查询语句即可正常运行。
内容的提问来源于stack exchange,提问作者D.W.
相关产品推荐
相关产品推荐

