Mysql 字符集不一致导致连表异常的解决

目录
  • 1. 解决方法
  • 2. mysql字符集
    • 字符集
    • 校验规则

做一个简单的如下的连表查询,居然直接提示错误,居然是字符集不一致的问题,本文记录一下mysql的字符集类型,以及下面这个问题的解决方案

select a.id, b.id from tt as a, t2 as b where a.xx = b.xx

-- Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_general_ci,IMPLICIT) for operation '='

1. 解决方法

先来看上面这个问题的解决方法,最容易想到的就是统一两张表的字符集,要么都是utf8mb4_general_ci,要么就都是utf8mb4_unicode_ci,统一一下这个问题就自然解决了
如果我不想修改表的字符集呢?毕竟生产环境下,做这种操作还是有风险的,下面是一种不太优雅的解决方法

在字段后面指定字符集(可以全部都指定为utf8mb4_general_ci 当然也可以全部指定为 utf8mb4_unicode_ci, 根据实际需要进行处理即可)

select a.id, b.id from tt as a, t2 as b where a.xx = b.xx collate utf8mb4_general_ci

2. mysql字符集

字符集

对于国内的小伙伴,一般而言我们常见的字符集有下面三种

  • gbk: 两字节
  • utf8: 三个字节
  • utf8mb4: 四个字节

而mysql实际支持的就比较多了,可以通过show charset;进行查询

校验规则

在实际的case中,经常会看到下面几种

  • utf8_bin
  • utf8mb4_unicode_ci
  • utf8mb4_general_ci
  • latin1_general_cs

当然我们也可以通过 show collation;查看所支持的校验规则

请注意上面的写法

  • ci: case insensitive的缩写 大小写不敏感
  • cs: case sensitive 大小写敏感
  • bin: 二进制存储,大小写敏感

到此这篇关于Mysql 字符集不一致导致连表异常的解决的文章就介绍到这了,更多相关Mysql 字符集连表异常内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 修改mysql默认字符集的两种方法详细解析

    (1) 最简单的修改方法,就是修改mysql的my.ini文件中的字符集键值,如 default-character-set = utf8    character_set_server = utf8 修改完后,重启mysql的服务,service mysql restart使用 mysql> SHOW VARIABLES LIKE 'character%';查看,发现数据库编码均已改成utf8 复制代码 代码如下: +--------------------------+-----------

  • Mysql5 字符集编码问题解决

    我们遵循的标准是,数据库,表,字段和页面或文本的编码要统一起来 很多mysql数据库工具(除了phpmyadmin,我偶尔用,功能强速度慢)都不支持创建时指定数据库编码,当然可以改my.ini来解决这个问题,但是需要重新启动mysql,不过用下面的语句会更有效 GBK: create database test2 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci; UTF8: CREATE DATABASE `test2` DEFAULT CHAR

  • mysql修改数据库编码(数据库字符集)和表的字符编码的方法

    mysql将表的字符编码转换成utf-8 复制代码 代码如下: alter table tb_anniversary convert to character set utf8; 修改数据库mysql字符编码为UTF8 步骤1:查看当前的字符编码方法 复制代码 代码如下: mysql> show variables like'character%'; +--------------------------+----------------------------+ |Variable_name 

  • MySql表、字段、库的字符集修改及查看方法

    修改数据库字符集: 复制代码 代码如下: ALTER DATABASE db_name DEFAULT CHARACTER SET character_name [COLLATE ...]; 把表默认的字符集和所有字符列(CHAR,VARCHAR,TEXT)改为新的字符集: 复制代码 代码如下: ALTER TABLE tbl_name CONVERT TO CHARACTER SET character_name [COLLATE ...] 如:ALTER TABLE logtest CONV

  • mysql字符集和校对规则(Mysql校对集)

    简要说明 字符集和校对规则 字符集是一套符号和编码.校对规则是在字符集内用于比较字符的一套规则. MySql在collation提供较强的支持,oracel在这方面没查到相应的资料. 不同字符集有不同的校对规则,命名约定:以其相关的字符集名开始,通常包括一个语言名,并且以_ci(大小写不敏感)._cs(大小写敏感)或_bin(二元)结束 校对规则一般分为两类: binary collation,二元法,直接比较字符的编码,可以认为是区分大小写的,因为字符集中'A'和'a'的编码显然不同. 字符集

  • 深入Mysql字符集设置分析

    基本概念 • 字符(Character)是指人类语言中最小的表义符号.例如'A'.'B'等: • 给定一系列字符,对每个字符赋予一个数值,用数值来代表对应的字符,这一数值就是字符的编码(Encoding).例如,我们给字符'A'赋予数值0,给字符'B'赋予数值1,则0就是字符'A'的编码: • 给定一系列字符并赋予对应的编码后,所有这些字符和编码对组成的集合就是字符集(Character Set).例如,给定字符列表为{'A','B'}时,{'A'=>0, 'B'=>1}就是一个字符集: •

  • Mysql 字符集不一致导致连表异常的解决

    目录 1. 解决方法 2. mysql字符集 字符集 校验规则 做一个简单的如下的连表查询,居然直接提示错误,居然是字符集不一致的问题,本文记录一下mysql的字符集类型,以及下面这个问题的解决方案 select a.id, b.id from tt as a, t2 as b where a.xx = b.xx -- Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_general_ci,IMPLICIT)

  • MySQL字符集 GBK、GB2312、UTF8区别 解决MYSQL中文乱码问题

    MySQL中涉及的几个字符集 character-set-server/default-character-set:服务器字符集,默认情况下所采用的. character-set-database:数据库字符集. character-set-table:数据库表字符集. 优先级依次增加.所以一般情况下只需要设置character-set-server,而在创建数据库和表时不特别指定字符集,这样统一采用character-set-server字符集. character-set-client:客户

  • MySQL中因字段字符集不同导致索引不能命中的解决方法

    什么是索引?为什么要建立索引? 索引用于快速找出在某个列中有一特定值的行,不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的时间就越多,如果表中查询的列有一个索引,MySQL能够快速到达一个位置去搜索数据文件,而不必查看所有数据,那么将会节省很大一部分时间. 例如:有一张person表,其中有2W条记录,记录着2W个人的信息.有一个Phone的字段记录每个人的电话号码,现在想要查询出电话号码为xxxx的人的信息. 如果没有索引,那么将从表中第一条记录

  • Vue enter回车导致页面刷新问题及解决

    目录 Vue enter回车导致页面刷新 解决方法 Vue按下enter默认刷新页面bug Vue enter回车导致页面刷新 分页中需要 输入页码进行跳转,但是却出现 跳到指定页面后,页面也刷新了.从而无法满足无刷新的分页.最初代码如下: <form class="zh-skip" action="">     <input type="number" v-model="pageNumber" oninpu

  • 简析mysql字符集导致恢复数据库报错问题

    mysql字符集编码错误的导入数据会提示错误了,这个和插入数据一样如果保存的数据与mysql编码不一样那么肯定会出现导入乱码或插入数据丢失的问题,下面我们一起来看一个例子. <script>ec(2);</script> 恢复数据库报错:由于字符集问题,最原始的数据库默认编码是latin1,新备份的数据库的编码是utf8,因此导致恢复错误. [root@hk byrd]# /usr/local/mysql/bin/mysql -uroot -p'admin' t4x < /t

  • 一次MySQL慢查询导致的故障

    我们知道分析MySQL语句查询性能的方法除了使用EXPLAIN 输出执行计划,还可以让MySQL记录下查询超过指定时间的语句,我们将超过指定时间的SQL语句查询称为"慢查询". 一. 起因 研发反应某台数据库僵死,后面的会话要么连接不上,要么要花费大量的时间返回结果,哪怕是一个简单的查询. 二. 处理 首先去监控平台查看服务器以及数据库状态,发现这台数据库有大量的慢查询.继续看服务器监控,CPU 平均使用率较高,IO 读写平均值正常.登录到 MySQL,使用 SHOW PROCESSL

  • 带你5分钟读懂MySQL字符集设置

    一.内容概述 在MySQL的使用过程中,了解字符集.字符序的概念,以及不同设置对数据存储.比较的影响非常重要.不少同学在日常工作中遇到的"乱码"问题,很有可能就是因为对字符集与字符序的理解不到位.设置错误造成的. 本文由浅入深,分别介绍了如下内容: 字符集.字符序的基本概念及联系 MySQL支持的字符集.字符序设置级,各设置级别之间的联系 server.database.table.column级字符集.字符序的查看及设置 应该何时设置字符集.字符序 二.字符集.字符序的概念与联系 在

  • MySQL字符集的基本类型与统一字符集分析

    以下的文章主要介绍的是MySQL字符集的基本类型, 统一字符集的实际操作方法,等相关内容的介绍,以下就是MySQL字符集的相关内容的描述,希望你会在以后的学习或是工作中带来很大的帮助. 一. MySQL字符集类型 MySQL服务器中有六个关键位置使用了字符集的概念,他们是:client .connection.database.results.server .system. a.其中client是客户端使用的字符集,相当于网页中的字符集设置如下<meta http-equiv="Conte

  • MYSQL锁表问题的解决方法

    本文实例讲述了MYSQL锁表问题的解决方法.分享给大家供大家参考,具体如下: 很多时候!一不小心就锁表!这里讲解决锁表终极方法! 案例一 mysql>show processlist; 参看sql语句 一般少的话 mysql>kill thread_id; 就可以解决了 kill掉第一个锁表的进程, 依然没有改善. 既然不改善, 咱们就想办法将所有锁表的进程kill掉吧, 简单的脚本如下. #!/bin/bash mysql - u root - e " show processli

  • 连接MySQL时出现1449与1045异常解决办法

    连接MySQL时出现1449与1045异常解决办法 mysql 1449 : The user specified as a definer ('root'@'%') does not exist 解决方法 把sql导到本地,执行存储过程 或者 查看视频报错: mysql 1449 : The user specified as a definer ('root'@'%') does not exist 解决方法 权限问题,授权 给 root  所有sql 权限 mysql> grant all

随机推荐