mysql数据库查实体illegal_MySQL数据库字符集引发存储过程【Illegal mix of collations】问题总结...

MySQL数据库字符集

1.1.1  MySQL字符集情况介绍

I. 字符集

字符值包含字母、数字和特殊符号。在字符值可以存储之前,字母、数字和字符必须转换为数值代码。所以必须建立一个转换表,其中包含了每个相关字符的数值代码。这样的转换表就称为字符集,有时也称为代码字符集(code character set)和字符编码(characterencoding)。

而在MySQL中,字符集的概念和编码方案的概念被看作是同义词。一个字符集(character set)是一个转换表和一个编码方案的组合。校对(collation)的概念是为了解决排序的顺序或字符的分组问题。因为字符的排序和分组需要字符之间的比较,校对就定义了这些比较的大小关系。

II. 查看数据库支持字符集

0818b9ca8b590ca3270a3433284dd417.png

III. 查看字符集utf8可用的校对

0818b9ca8b590ca3270a3433284dd417.png

IV. 字符集和校对的系统变量

系统变量

说明

CHARACTER_SET_CLIENT

从客户机发送给服务器的语句的字符集

CHARACTER_SET_CONNECTION

客户机和服务器连接的字符集

CHARACTER_SET_DATABASE

当前数据库的默认字符集。每次使用USE语句来“跳转”到另一个数据库时,这个变量就会改变。如果没有当前数据库,其值为CHARACTER_SET_SERVER

CHARACTER_SET_RESULTS

从服务器发送到客户机的SELECT语句的最终结果的字符集,包括列的值,列的元数据——列名,错误信息

CHARACTER_SET_SERVER

服务器的默认字符集

CHARACTER_SET_SYSTEM

系统字符集。用于数据库中对象(如表和列)的名字,也用于存储在目录表中函数的名字。其值总是等于utf8

CHARACTER_SET_DIR

注册的所有字符的文件都在这个目录中

COLLATION_CONNECTION

当前连接的校对

COLLATION_DATABASE

当前日期的默认校对。每次使用USE语句来“跳转”到另一个数据库时,这个变量就会改变。

COLLATION_SERVER

服务器默认校对

V. 数据库对象的字符集的指定有如下继承关系

Server -> Database -> Table ->Column

也就是说,如果后者没有显示指定字符集,那么将采用前者的字符集。

1.1.2  存储过程执行错误及引发原因

I. 存储过程执行错误现象

0818b9ca8b590ca3270a3433284dd417.png

II. 错误引发原因分析与解决方案

Illegal mix of collations(gbk_chinese_ci,IMPLICIT) and (gb2312_chinese_ci,IMPLICIT) for operation ‘=’ :意思是说字符编码不一样,不能进行比较,也就是说数据库内部的编码都不一样,有的数据是gbk_chinese_ci,有的数据是gb2312_chinese_ci,因此解决此问题的核心就是将数据库所有的编码进行统一。

问题引发原因:

就是存储过程中传入的参数字符编码与数据库表的字符编码不一致,一个是GBK一个是GB2312,由于字符编码不一样,无法比较(条件匹配查询)。

经过查找定位后发现:创建数据库时指定字符集为gb2312,没有指定比较字符集,而数据库中的表对应字符集为GBK。

解决办法:

在创建数据库时,指定数据库字符集并指定比较字符集,参考语句如下 :

CREATE DATABASE cbs_db DEFAULT CHARACTERSET gbk COLLATE gbk_chinese_ci;

character set: 即字符集。

collation,:即比对方法。

collaction是针对字符集来存在的,通常排序有3种不同的方式:ci/ cs/ bin

方式

对应英文

中文含义

ci

capital ignore

不区分大小写

cs

captial sensitive

大写敏感

bin

二进制排序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值