ZBLOG

openresty connect to mysql error : Unknown collation: '0' , errno : 1273

这个错误表明 OpenResty 在连接 MySQL 时遇到了不支持的字符集排序规则(collation)。以下是可能的原因和解决方案:

错误分析

  1. 原因:MySQL 服务端使用了较新的 collation(如 utf8mb4_0900_ai_ci),但客户端(OpenResty/Lua MySQL驱动)版本较旧,无法识别该 collation。
  2. 典型场景
    • 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不支持错误
  • 常见兼容collationsutf8_general_ci, utf8mb4_general_ci
  • 性能提示utf8mb4_unicode_cigeneral_ci更精确但稍慢

建议先使用方法2进行快速验证,再根据实际需求选择长期方案。如果问题仍然存在,可以提供更多环境信息进一步诊断。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=23575

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?