这个错误表明 OpenResty 在连接 MySQL 时遇到了不支持的字符集排序规则(collation)。以下是可能的原因和解决方案:
错误分析
- 原因:MySQL 服务端使用了较新的 collation(如
utf8mb4_0900_ai_ci
),但客户端(OpenResty/Lua MySQL驱动)版本较旧,无法识别该 collation。 - 典型场景:
- MySQL 8.0+ 默认使用新 collation
- Lua MySQL 驱动(如
lua-resty-mysql
)未更新支持
解决方案
方法1:修改MySQL配置(推荐)
-- 检查当前collation
SHOW VARIABLES LIKE 'collation%';
-- 临时修改会话级collation(测试用)
SET NAMES utf8mb4 COLLATE utf8mb4_general_ci;
-- 永久修改(需重启MySQL)
[mysqld]
collation_server = utf8mb4_general_ci
character_set_server = utf8mb4
方法2:连接时指定参数
在 OpenResty 连接代码中显式指定:
local mysql = require "resty.mysql"
local db, err = mysql:new()
db:connect({
host = "127.0.0.1",
port = 3306,
database = "your_db",
user = "user",
password = "password",
charset = "utf8mb4", -- 明确指定字符集
collation = "utf8mb4_general_ci" -- 指定支持的collation
})
方法3:升级驱动组件
# 更新 lua-resty-mysql
luarocks install lua-resty-mysql --force
# OpenResty建议版本要求:
# - openresty >=1.19.3
# - lua-resty-mysql >=0.24
方法4:修改表结构(兼容方案)
ALTER TABLE your_table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
FAQ补充说明:
- errno1273:专指 collation不支持错误
- 常见兼容collations:
utf8_general_ci
,utf8mb4_general_ci
- 性能提示:
utf8mb4_unicode_ci
比general_ci
更精确但稍慢
建议先使用方法2进行快速验证,再根据实际需求选择长期方案。如果问题仍然存在,可以提供更多环境信息进一步诊断。
内容由零声教学AI助手提供,问题来源于学员提问