上篇文章遇到的小坑找到原因了, 就是我偷懒,没有解析Capabilities Flags, 使用的之前的Capabilities Flags 就没有设置CLIENT_DEPRECATE_EOF, 也就是客户端认为用OK代替EOF, 但是我中间件还是使用EOF, 手动改为OK包后正常.
这里整理下完整的Capabilities Flags吧, server/client是通用的
代码语言:python代码运行次数:13复制#client/server
CLIENT_LONG_PASSWORD = 1 << 0 #旧密码插件 Use the improved version of Old Password Authentication
CLIENT_FOUND_ROWS = 1 << 1 #Send found rows instead of affected rows in EOF_Packet
CLIENT_LONG_FLAG = 1 << 2 # for ColumnDefinition320
CLIENT_CONNECT_WITH_DB = 1 << 3 #是否带有 dbname
CLIENT_NO_SCHEMA = 1 << 4 #已弃用. (不允许使用db.table.col)
CLIENT_COMPRESS = 1 << 5 #是否支持压缩
CLIENT_ODBC = 1 << 6 #odbc
CLIENT_LOCAL_FILES = 1 << 7 #能否使用 LOAD DATA LOCAL
CLIENT_IGNORE_SPACE = 1 << 8 #是否忽略 括号( 前面的空格
CLIENT_PROTOCOL_41 = 1 << 9 #是否使用CLIENT_PROTOCOL_41
CLIENT_INTERACTIVE = 1 << 10 #是否为交互式终端(就是mysql连接的那种)
CLIENT_SSL = 1 << 11 #是否支持SSL
CLIENT_IGNORE_SIGPIPE = 1 << 12 #网络故障的时候发SIGPIPE
CLIENT_TRANSACTIONS = 1 << 13 #OK/EOF包的status_flags
CLIENT_RESERVED = 1 << 14 #已弃用
CLIENT_RESERVED2 = 1 << 15 #已弃用
CLIENT_MULTI_STATEMENTS = 1 << 16 #是否支持multi-stmt. COM_QUERY/COM_STMT_PREPARE中多条语句
CLIENT_MULTI_RESULTS = 1 << 17 #multi-results
CLIENT_PS_MULTI_RESULTS = 1 << 18 #PS-protocol
CLIENT_PLUGIN_AUTH = 1 << 19 #是否支持密码插件
CLIENT_CONNECT_ATTRS = 1 << 20 #是否支持连接属性
CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA = 1 << 21 #密码认证包能否大于255字节
CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS = 1 << 22 #不关闭密码过期的连接. 我要改密码..
CLIENT_SESSION_TRACK = 1 << 23 #能够处理服务器状态变更信息
CLIENT_DEPRECATE_EOF = 1 << 24 #OK包代替EOF包. 小坑...
CLIENT_OPTIONAL_RESULTSET_METADATA = 1 << 25 #客户端能处理可选元数据信息
CLIENT_ZSTD_COMPRESSION_ALGORITHM = 1 << 26 #zstd压缩
CLIENT_QUERY_ATTRIBUTES = 1 << 27 #支持COM_QUERY/COM_STMT_EXECUTE中的可选参数
MULTI_FACTOR_AUTHENTICATION = 1 << 28
CLIENT_CAPABILITY_EXTENSION = 1 << 29
CLIENT_SSL_VERIFY_SERVER_CERT = 1 << 30 #验证服务器证书
CLIENT_REMEMBER_OPTIONS = 1 << 31