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不能输入中文 也可用此方法解决。

相关推荐
企鹅侠客15 分钟前
实践篇:14-构建 Node.js 应用程序镜像
docker·node.js·dockerfile
cui_win25 分钟前
【内存】Linux 内核优化实战 - net.ipv4.tcp_tw_reuse
linux·网络·tcp/ip
做一个AC梦1 小时前
Docker安装失败:Docker Desktop installation failed
运维·docker·容器
Shan12051 小时前
浅谈Docker Kicks in的应用
运维·docker·容器
Li&&Tao1 小时前
docker 常用命令
docker·容器·eureka
Edingbrugh.南空2 小时前
Flink MySQL CDC 环境配置与验证
mysql·adb·flink
BD_Marathon2 小时前
Ubuntu:Mysql服务器
服务器·mysql·ubuntu
Jiude2 小时前
MinIO 社区版被故意阉割,Web管理功能全面移除。我来试试国产RustFS
后端·docker·架构
程序猿小D3 小时前
[附源码+数据库+毕业论文]基于Spring+MyBatis+MySQL+Maven+jsp实现的电影小说网站管理系统,推荐!
java·数据库·mysql·spring·毕业设计·ssm框架·电影小说网站
羊小猪~~3 小时前
数据库学习笔记(十七)--触发器的使用
数据库·人工智能·后端·sql·深度学习·mysql·考研