mysql排序规则错误_MySQL中“非法混合排序规则”错误的疑难解答

046db6749c6b45c389aa2cb7764898a3.png

阿波罗的战车

更改字符串的一个(或两者)的排序规则以使它们匹配,或者添加一个COLLATE从句到你的表情。这“校对”到底是什么?如下文所述字符集和排序规则:A 字符集是一组符号和编码。一个校对用于比较字符集中字符的一组规则。让我们用一个假想字符集的例子来明确区分。假设我们有一个有四个字母的字母表:“A”, “B”, “a”, “b“我们给每个字母一个数字:“A” = 0, “B” = 1, “a” = 2, “b“=3.信”A“是一个符号,数字0是编码为“A“,这四个字母及其编码的组合是字符集.假设我们要比较两个字符串值,“A“和”B“最简单的方法是查看编码:0表示“A“和1代表”B“因为0小于1,我们说“A“小于”B“我们刚才做的是对我们的字符集进行排序。排序规则是一组规则(在本例中只有一条规则):“比较编码”。我们称之为最简单的排序规则双星校对。但是如果我们想说小写字母和大写字母是等价的呢?那么我们至少有两个规则:(1)处理小写字母“a“和”b“相当于”A“和”B“;(2)然后比较编码。我们称之为a不区分大小写校对。它比二进制排序要复杂一些。在现实生活中,大多数字符集都有许多字符:不仅仅是“A“和”B“但是整个字母,有时是多重字母或东方文字系统,有数千个字符,还有许多特殊的符号和标点符号。在现实生活中,大多数校对都有许多规则,不仅是关于是否区分字母,还包括是否区分口音(“重音”是一个附加在一个字符上的标记,就像在德语中那样)。Ö),以及多字符映射(例如“Ö” = “OE“在两个德国校勘中的一个)。下面给出了进一步的例子校对效果实例.好的,但是MySQL如何决定对给定表达式使用哪种排序规则呢?如下文所述表达的校对:在大多数语句中,很明显MySQL使用什么排序规则来解决比较操作。例如,在以下情况下,应该清楚地看到,排序规则是列的排序规则。charset_name:SELECT x FROM T ORDER BY x;SELECT x FROM T WHERE x = x;SELECT DISTINCT x FROM T;但是,对于多个操作数,可能存在歧义。例如:SELECT x FROM T WHERE x = 'Y';比较是否使用列的排序规则?x,或者字符串文字。'Y'?双管齐下x和'Y'有排序,那么哪个排序优先?标准SQL使用以前称为“矫顽力”的规则来解决这些问题。[ deletia ]MySQL使用具有以下规则的矫顽力值来解决歧义:如果双方都是Unicode,或者双方都不是Unicode,则这是一个错误。如果其中一方具有Unicode字符集,另一方具有非Unicode字符集,则具有Unicode字符集的侧获胜,并将自动字符集转换应用于非Unicode侧。例如,以下语句不返回错误:SELECT CONCAT(utf8_column, latin1_column) FROM t1;它返回一个结果,该结果的字符集为utf8和同样的校对utf8_column..值.的值latin1_column自动转换为utf8在连接之前。对于操作数来自同一字符集的操作数的操作,但该操作混合了_bin校对和_ci或_cs校对_bin使用校对。这类似于混合非二进制字符串和二进制字符串的操作如何将操作数计算为二进制字符串,只是用于排序规则而不是数据类型。使用矫顽力最低的排序规则。如果双方具有相同的矫顽力,那么:那么,什么是“非法拼贴”呢?当表达式比较两个字符串的不同排序规则(但具有相同的矫顽力)和矫顽力规则无法帮助解决冲突时,就会出现“排序规则的非法组合”。这是在上述报价的第三个要点下所描述的情况.问题中给出的特别错误,Illegal mix of collations (latin1_general_cs,IMPLICIT) and (latin1_general_ci,IMPLICIT) for operation '=',告诉我们,两个具有相同矫顽力的非Unicode字符串之间有一个相等的比较。它还告诉我们,排序规则不是在语句中显式地给出的,而是从字符串的源(例如列元数据)中隐含的。这一切都很好,但是如何解决这些错误呢?正如上面引用的手册摘要所表明的那样,这个问题可以通过多种方式解决,其中有两种是明智的,建议如下:如果仅为解决这一错误而部署其他人,则其他的做法将是非常糟糕的:强制字符串中的一个(或两者)具有其他的矫顽力值,以便优先。使用CONCAT()或CONCAT_WS()将导致字符串的矫顽力为1;(如果在存储的例程中)使用参数/局部变量将导致字符串的矫顽力为2。更改字符串的一个(或两者)的编码,以便一个是Unicode,另一个不是。这可以通过将代码转换为CONVERT(expr USING transcoding_name);或通过更改数据的基本字符集(例如修改列、更改character_set_connection用于文字值,或以不同的编码和更改从客户端发送它们。character_set_client/添加字符集介绍器)。请注意,如果无法在新字符集中编码某些所需字符,则更改编码将导致其他问题。更改字符串的一个(或两者)的编码,使它们都相同,并将一个字符串更改为使用相关的_bin校对。以上详细介绍了更改编码和排序规则的方法。如果实际需要应用比_bin校对。明示COLLATE子句的矫顽力为0。(一点也不能矫顽力)具有不同排序规则的两个字符串的连接具有1的矫顽力。列的排序规则、存储的例程参数或局部变量的矫顽力为2。“系统常量”(由函数返回的字符串,如USER()或VERSION())矫顽力为3。文字的排序规则具有4的矫顽力。NULL或派生自NULL矫顽力为5。更改一个字符串(或两个字符串)的排序规则,以便它们匹配,并且不再有任何歧义。如何做到这一点取决于字符串的来源:文字表达式采用collation_connection表的值采用列元数据中指定的排序规则。强迫一条字符串不可强制。我省略了以下引述:MySQL分配矫顽力值如下:因此,只需添加一个COLLATE子句到比较中使用的字符串之一将强制使用该排序规则。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/486404.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mybatis代码自动生成器_最近很火的文章自动生成器,python源码公开了(内附python代码)

学了python,但是又不知道可以用来干嘛。开发一个计算器?太low了。开发一个网站?感觉网站涉及太多知识点,一个人搞不定。不用慌,本文介绍一个最近很火的一个文章自动生成器,它是用python写的,能够…

NB-IoT与eMTC差异全解析

来源:北京物联网智能技术应用协会NB-IoT和eMTC同属于蜂窝物联网,也同时具备了蜂窝物联网的“3C”特征:•Coverage 增强覆盖•Consumption 低功耗•Cost 低成本为了满足“3C”目标,NB-IoT和eMTC的实现方式也有不同之处,…

设计模式--外观模式

实验12:外观模式 本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解外观模式的动机,掌握该模式的结构; 2、能够利用外观模式解决实际问题。 [实验任务]:计算机开启 在计算机主机(Main…

德国颁发抄袭大奖,中国包揽前10名拿了大满贯!

来源:钱塘大数据 昨天看到一则来自欧洲的新闻,实在是震惊!德国设立了一个奖项,中国包揽了前10名,但我们却高兴不起来,还很难为情。因为这个奖,是为了反对山寨而设立的剽窃奖。获得这样的奖&…

11大领域148个热点和新兴前沿发布!有你的化学与材料研究方向吗?

来源:科学网 作者:郑金武11月13日,中国科学院科技战略咨询研究院、中国科学院文献情报中心与科睿唯安联合向全球发布了《2020研究前沿》报告。报告基于2014年-2019年的论文数据,遴选展示了在农业科学、植物学和动物学&#xff0c…

List注意啊

java.unit工具类,例如:Map、List等 java.awt图形绘制类,例如:list组件可以为用户提供了一个可滚动的文件列表选项,可设置list使其为用户提供单项或多项选择 我在第一次使用List的时候,包导入了第二个&#…

git idea 图形化_Git大全,你所需要的Git资料都在这里

不管怎样,Git已经成为事实上的版本管理工具的王者,之前的CVS被SVN吃掉了,现如今SVN的大好河山也被Git蚕食了大半,作为开发者的你,如果还不能够熟练的使用Git来管理你的代码,后果将会很严重,何况…

是否同一棵二叉搜索树

给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果。于是对于输入的各种插入序列,你需要判断它们…

修改软件许可证使用时间_阮一峰:为什么开源数据库改变许可证?

CockroachDB 是一个开源的分布式数据库,最近改变了代码授权,放弃了 Apache 许可证。许多开源数据库这一两年都改变了授权,比如 Confluent、Elastic 、MongoDB、Redis Labs、TimescaleDB。本文分析这种现象。一、CockroachDB 的许可证变更Cock…

线程 sleep 取消_C/C++ 多线程机制

一、C/C多线程操作说明C/C多线程基本操作如下: 1. 线程的建立结束 2. 线程的互斥和同步 3. 使用信号量控制线程 4. 线程的基本属性配置 在C/C代码编写时,使用多线程机制,首先需要做的事情就是声明引用,具体如下:#inclu…

事务java_Java事务之一——Java事务的基本问题

Java中的事务处理有多简单?在使用EJB时,事务在我们几乎察觉不到的情况下发挥着作用;而在使用Spring时,也只需要配置一个TransactionManager,然后在需要事务的方法上加上Transactional注解就行了。Java的事务处理之所以…

seo模拟点击软件_浅谈百度SEO快排是什么、原理、如何判断及应对

前言:以前我说过不准备写这个快排,一是我自己的网站没有操作过所谓的快排 ,二是我并不能像网上很多写的揭秘百度快排(说实话,你都能揭秘的方法了,还真的很有用吗?真正懂的人都在低调赚money)。我只是站在一个小白角度…

100多年了,左右大脑的不对称性依然备受关注

来源:brainnews1,不对称的视角下的大脑偏侧化关于大脑不对称性的比较研究最早可以追溯到19世纪,但由于早期认为偏侧化为人类所独有,因此该领域的研究一度消失。这一领域在20世纪70年代重新出现,使我们了解到脑和行为的…

经由因果分析,反驳AI监控学生上课,及辨别健康类谣言

来源:混沌巡洋舰想象这样一个场景,你和你心爱的女孩一起自习,你的理科好,于是你看着她听数学的网课时,有时露出困惑的表情,还有时会走神。然后等她听完,你再把你觉得她没有听懂的部分&#xff0…

java controller json_springMVC的controller层接收前端json数据

1.前端的操作:对象接收json数据方式:将所需要传的数据转化为json数据,并将这些数据以post方式传到后台的controller层,然后controller层接收json数据,并且是以对象的形式进行接收。这里面是springmvc自动控制将这些数据…

里程碑!SpaceX 载人首飞发射成功,马斯克填补美国载人飞行近十年空白

来源:雷锋网作者 | 付静1 代表着首次,标志着政府与企业持续合作前往国际空间站的开始。终于,美国太空探索技术公司(SpaceX)的首次正式载人飞行任务拉开大幕!美东时间 2020 年 11 月 15 日 19 时 27 分&…

取文字_把这4个字母输入word,会得到一段神秘文字,承载着一段历史

在英文的输入状态下,把“ rand()”输入word后,按下回车键,就会突然跳出一页文字把“ rand()”输入excel后,按下回车键,则会得到这样的结果,0.134582最后再把“ rand()”输入PPT,按下回车键&…

一文看懂数字孪生,工信部权威白皮书

来源:智东西11月11日消息,《由商务部、科技部、工信部、国家发改委、农业农村部、国家知识产权局、中国科学院、中国工程院等部委和深圳市人民政府共同举办的中国国际高新技术成果交易会正式开幕。作为大会主会场的重要组成部分,由工信部下属…

linux -- control service and daemon process

linux -- control service and daemon process 一、几个重要概念的讲解 1、systemd 系统启动和服务器进程由 systemd 系统和服务管理器进行管理 此程序提供一种方式,可以在启动时和运行中的系统上激活系统资源、服务器守护进程和其他进程 2、守护进程 守护进程是在执…

基于人工智能智商研究的智能定律初探

什么是智能和意识一直是智能科学领域最基础也是最具有争议的问题,2014年以来,我们在对人机通用智能发展水平的进行研究时提出了标准智能模型,统一描述人和智能机器的特征。在这个研究的基础上,2020年5月我们在《Annals of Data》发…