MySQL skip-character-set-client-handshake导致的一个字符集问题

今天帮同事处理一个棘手的事情,问题是这样的:

无论在客户机用哪个版本的mysql客户端连接服务器,发现只要服务器端设置了

代码如下:

character-set-server = utf8

之后,

代码如下:

character_set_client、 character_set_connection、character_set_results

就始终都是和服务器端保持一致了,即便在mysql客户端加上选项

代码如下:

--default-character-set=utf8

也不行,除非连接进去后,再手工执行命令

代码如下:

set names latin1

,才会将client、connection、results的字符集改过来。

经过仔细对比,最终发现让我踩坑的地方是,服务器端设置了另一个选项:

代码如下:

skip-character-set-client-handshake

文档上关于这个选项的解释是这样的:

代码如下:

--character-set-client-handshake

Don't ignore character set information sent by the client. To ignore client information and use the default server character set, use --skip-character-set-client-handshake; this makes MySQL behave like MySQL 4.0

这么看来,其实也是有好处的。比如启用 skip-character-set-client-handshake 选项后,就可以避免客户端程序误操作,使用其他字符集连接进来并写入数据,从而引发乱码问题。

(0)

相关推荐

  • MySQL skip-character-set-client-handshake导致的一个字符集问题

    今天帮同事处理一个棘手的事情,问题是这样的: 无论在客户机用哪个版本的mysql客户端连接服务器,发现只要服务器端设置了 复制代码 代码如下: character-set-server = utf8 之后, 复制代码 代码如下: character_set_client. character_set_connection.character_set_results 就始终都是和服务器端保持一致了,即便在mysql客户端加上选项 复制代码 代码如下: --default-character-set

  • Mysql 5.6 "隐式转换"导致的索引失效和数据不准确的问题

    背景 在一次进行SQl查询时,我试着对where条件中vachar类型的字段去掉单引号查询,这个时候发现这条本应该很快的语句竟然很慢.这个varchar字段有一个复合索引.其中的总条数有58989,甚至不加单引号查出来的数据不是我们想要的数据. 使用的是mysql 5.6版本,innoDB引擎 实际情况如下 下面我们来看一下执行的结果 在上面的描述中我们还得注意就是,你的where条件的字符串不加单引号必须是全数字.不然就会报错 还有可能查出来的数据不是我们想要的数据.如下图 分析 从执行结果来

  • MySQL对window函数执行sum函数可能出现的一个Bug

    使用MySql的窗口函数统计数据时,发现一个小的问题,与大家一起探讨下. 环境配置: mysql-installer-community-8.0.20.0 问题点:在sum对window函数执行时,如果有重复数据,会直接把相同的数据相加,并不是逐步相加. 问题描述 数据:在一个成绩表中,有三个个字段:学生s_id,课程c_id,成绩s_score. 查询条件查询每个课程的学生成绩排名和成绩汇总. 查询结果:发现如果同一个课程有相同成绩是,汇总成绩不是累加的,而是一次全部加上去. 创建数据表 CR

  • Mysql如何在select查询时追加(添加)一个字段并指定值

    目录 在select查询时追加(添加)一个字段并指定值 使用select查询时,在查询结果中增加一个字段并指定固定值 在select查询时追加(添加)一个字段并指定值 在特定时候,在 mysql 的查询结果中我们需要追加一个字段来实现某些特定的功能,这时我们可以用到以下语法来实现 值 as 字段 比如我们需要给这个查询结果追加一个 xx 字段并赋值为 null ,可以这样实现 select *, null as xx from topic; 使用select查询时,在查询结果中增加一个字段并指定

  • 解决MySQL中IN子查询会导致无法使用索引问题

    今天看到一篇关于MySQL的IN子查询优化的案例, 一开始感觉有点半信半疑(如果是换做在SQL Server中,这种情况是绝对不可能的,后面会做一个简单的测试.) 随后动手按照他说的做了一个表来测试验证,发现MySQL的IN子查询做的不好,确实会导致无法使用索引的情况(IN子查询无法使用所以,场景是MySQL,截止的版本是5.7.18) MySQL的测试环境 测试表如下 create table test_table2 ( id int auto_increment primary key, p

  • 解决MySQL因不能创建临时文件而导致无法启动的方法

    问题描述 最近在工作中遇到一个问题,MySQL 启动失败,错误日志: mysqld: Can't create/write to file '/tmp/ibfguTtC' (Errcode: 13) 说明/tmp目录无法写入 解决办法 使用命令 ll -d /tmp 命令检查目录权限 使用 chmod 1777 /tmp 设置为正确权限 启动成功 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对我们的支持.

  • MySQL因配置过大内存导致无法启动的解决方法

    问题描述 MySQL 启动时报错,查看错误日志有 [ERROR] InnoDB: Cannot allocate memory for the buffer pool (不能从缓存池中分配给innodb引擎需要的内存) 解决办法 需要调整 MySQL 配置文件 my.cnf 中的 innodb_buffer_pool_size.key_buffer_size 的大小设置,适当的调大内存分配,一般调整为系统内存的一半 先使用 free -m 查看下系统内存大小,查看是 1G 内存 那么 vi /e

  • mysql免安装版的实际配置方法

    以下的文章主要向大家讲述的是MySQL 免安装版的实际配置方法,其免安装版本可在相关网站下载,下载之后可将其解压到c:\MySQL获取他任意位置,解压后在目录下,找到my-huge.ini,my-large.ini,my-medium.ini配置文件. 打开进行配置: 复制代码 代码如下: [MySQLd] # set basedir to your installation path basedir=c:/MySQL # set datadir to the location of your

  • JDBC连接mysql乱码异常问题处理总结

    前段时间学习JDBC,要连接mysql获取数据.按照老师的样例数据,要存一些名字之类的信息,用的都是英文名,我当时就不太想用英文,就把我室友的名字存了进去,嘿嘿,结果,出问题了. 连接数据库语句: static final String DB_URL = "jdbc:mysql://localhost/filemanagement"; 查询语句: private static final String theUserQuery = "SELECT name, password

  • mysql 8.0 错误The server requested authentication method unknown to the client解决方法

    mysql 安装了最新版本8.0.11后创建用户并授权后,授权的用户连接数据库提示 The server requested authentication method unknown to the client 查阅一些相关的资料后发现是由于新版本的mysql账号密码解锁机制不一致导致的 解决办法: 删除创建的用户和授权, 找到mysql配置文件并加入 default_authentication_plugin=mysql_native_password 变为原来的验证方式,然后从新创建用户并

随机推荐