首页 > 数据库 >mysql字符集&编码问题

mysql字符集&编码问题

时间:2023-01-08 15:22:19浏览次数:65  
标签:编码 set character 字符集 client mysql

1. mysql各编码变量含义

使用show variables like 'character%'后检查出mysql中有若干编码:

● character_set_client
客户端来源数据使用的字符集,也就是客户端发过来的query使用的什么字符集
● character_set_connection
MySQL接受到query后,按照character_set_client将其转化为character_set_connection设定的字符集。
● character_set_database
当前选中数据库的默认字符集
● character_set_filesystem
文件系统的编码格式,把操作系统上的文件名转化成此字符集,即把 character_set_client转换character_set_filesystem, 默认binary是不做任何转换的。
● character_set_results
查询结果编码的字符集
● character_set_server
服务器安装时指定的默认编码格式,这个变量建议由系统自己管理,不要人为定义
● character_set_system
系统元数据(字段名等)字符集:这个值一直是utf8,不需要设置。
数据库系统使用的编码格式,它是为存储系统元数据(metadata)的编码格式。
● character_sets_dir
字符集安装目录
——参考:https://blog.csdn.net/peanutwzk/article/details/107869675

2. 执行sql语句时的编码转换

执行一条插入语句时

① 客户端输入语句中插入的字符串内容会按照~client的字符集进行编码;
② 传输过程:~client先转成~filesystem(一般就是binary)转成~connection字符集;
③ 服务器接收到的字符集就是~connection设定的字符集了;

执行一条查询语句时

① ② ③ 过程和上面一致;
④ 返回查询结果:按照~results的编码返回,如果没有设置,就按照~server的编码格式返回;

3. mysql乱码及其解决

综上,向mysql中插入数据时,原则上只要~connection~database二者字符集不冲突就不会出现乱码问题。~client反而不会有什么影响,但是一般插入的数据本来就在本地,所以为了正常显示,三者通常都是相同的编码格式。

提问:执行查询语句时,返回的结果会转为~client吗?如果不转的&~results~client又不一样的话岂不是会看到乱码?
答:亲测不影响,应该是有转化的:

字符集更改操作

按照set character_set_aaa=bbb的规则进行更改,则变量~aaa会被修改为bbb字符集。注意,这个操作仅针对当次mysql运行有效,重启之后还是会变回默认的(个人比较推荐这样更改)。

永久性更改字符集设置:看这个吧

标签:编码,set,character,字符集,client,mysql
From: https://www.cnblogs.com/YuanShiRenY/p/db_code.html

相关文章

  • mysql数据库系统​
    拓补图​推荐步骤​在centos01上安装Mysql数据库服务,生成服务部器其配置文件,添加系统服务优化命令初始化mysql设置访问密码登录mysql数据库​在centos01的mysql服务器上创建......
  • 如何去掉 node.js 获取MySQL数据产生的RowDataPacket
    如何去掉node.js获取MySQL数据产生的RowDataPacket利用JSON.stringify()把对象转为对象字符串,可去掉RowDataPacket。router.post('/login',function(req,res){......
  • MySQL18 - 基础操作进阶
    INSERT插入多条记录INSERTINTOt_user (id,name,birth,create_time)VALUES (3,'hehe','1990-01-01',NOW()), (4,'haha','1990-01-01',NOW()), (5,'@@',......
  • MySql中json类型数据的查询以及在MyBatis-Plus中的使用
    表结构和初始数据新建表结构CREATETABLE`json_test`(`id`intNOTNULLAUTO_INCREMENT,`roles`jsonDEFAULTNULLCOMMENT'角色',`project`jsonDEFAULTNULL......
  • MySQL17 - DML基本语法 - 增删改
    DML基本语法-增删改DATE和DATETIME两个类型的区别DATE是短日期:只包括年-月-日默认格式:%Y-%m-%dDATETIME是长日期:包括年-月-日-时-分-秒默认格式:%Y-......
  • MySQL数据库提权之UDF提权和MOF提权
    UDF提权概念:udf的设计初衷是为了方便用户自定义一些函数,方便查询一些复杂的数据,同时也增加了使用udf提权的可能。攻击者通过编写调用cmd或者shell的udf.dll文件,并且导入......
  • MySQL16 - DDL基本语法
    DDL基本语法创建学生表,包括学号、姓名、年龄、性别、邮箱地址CREATETABLEt_student( noINT, nameVARCHAR(32), sexCHAR(1)DEFAULT'm', ageINT(3), emailV......
  • MYSQL在Linux的安装
    MYSQL在Linux的安装Centos7centos默认带有mariadb,与mysql冲突1、检测当前系统中是否安装MySQLrpm-qa|grepmysql2、卸载已经安装的冲突软件rpm-e--n......
  • Oracle官网下载MySql
    第一步:进入Oracle官网地址第二步:在Products中点击MySQL   第三步:点击DOWNLOADS第三步:点击MySQLCommunity(GPL)Downloads  第四步:点击MySQLCommunitySe......
  • mysql 连接时报错 :Client does not support authentication protocol requested by se
      错误原因:登录mysql 查看登录的用户的加密方式:  目前用的时最新版的mysql8 用户信息加密方式用的是caching_sha2_password实现的,  将其改为mysql......