docker k8s mysql 命令行 sql 不能输入中文

目录

目标

在 docker 容器中,通过 mysql -u name -p 的方式登录命令行终端后,可能会出现,在执行 sql 语句时,可能会出现无法输入中文字符的情况。

现象

如

sql 复制代码
update table_name set column_name = 'abc_姓名' where id = '1';

结果在终端只能输入为

sql 复制代码
update table_name set column_name = 'abc_' where id = '1';

原因

进入 deocker 容器,查询 locale ,可以看到系统使用的是POSIX字符集。

POSIX字符集是不支持中文的,而C.UTF-8是支持中文的,只要把系统中的环境 LANG 改为"C.UTF-8"格式即可解决问题。

shell 复制代码
root@yh:~# docker exec -it yh-mysql bash
root@5edc6da46079:/# locale
LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=

解决

通过 env LANG=C.UTF-8 参数登入 docker 容器

shell 复制代码
root@yh:~# docker exec -it yh-mysql env LANG=C.UTF-8 /bin/bash
root@5edc6da46079:/# locale
LANG=C.UTF-8
LANGUAGE=
LC_CTYPE="C.UTF-8"
LC_NUMERIC="C.UTF-8"
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY="C.UTF-8"
LC_MESSAGES="C.UTF-8"
LC_PAPER="C.UTF-8"
LC_NAME="C.UTF-8"
LC_ADDRESS="C.UTF-8"
LC_TELEPHONE="C.UTF-8"
LC_MEASUREMENT="C.UTF-8"
LC_IDENTIFICATION="C.UTF-8"
LC_ALL=

此时,正常登录 mysql后,执行含有中文的 sql 即可。

注意 :这样修改只是临时修改。要永久修改,需要在创建容器时在dockerfile中设置。

K8s进入pod不能输入中文 也可用此方法解决。

相关推荐
浩浩测试一下3 小时前
Linux 底层知识点 1
linux·运维·服务器
Escalating_xu3 小时前
【Linux 网络编程】TCP 跨平台实战:用 Windows 客户端访问 Linux 服务器
linux·服务器·网络
忆挽篱笙歌4 小时前
环境变量,本地变量
linux·运维·服务器
码间留白5 小时前
手把手把 GitHub 推上阿里云 ECS:Actions CI/CD 全链路避坑实录(折腾好几天,到 2 分钟见绿)
运维·阿里云·ci/cd·docker·devops·github actions
Vex2une6 小时前
Docker Desktop WSL2后端:2026年性能调优与避坑实战指南
windows·docker·desktop·gpu容器·容器开发·virtiofs·buildkit
L0016 小时前
MySQL5.7 DATE 字段无法设置默认日期?用触发器搞定|个人任务清单项目实战
mysql
吹什么轩7 小时前
linux系统复习:僵尸进程与孤儿进程
linux·运维·php
程序员老赵7 小时前
Docker 部署青龙面板:轻松搭建定时任务管理平台
前端·docker·开源
TTATTC7 小时前
为什么单会话聊天做不好复杂工程?Claude Code 创作者的并发 Worktree 与记忆闭环实践
docker·开源
jonyleek7 小时前
JVS数字底座私有化部署实践:Spring Cloud + K8S 实现文档平台开箱即用
elasticsearch·kubernetes·私有化部署·springcloud·minio·jvs企业文档·文档治理