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的实现方式也有不同之处,…

Laravel 代码开发最佳实践(持续更新)

http://laravelacademy.org/post/8464.html转载于:https://www.cnblogs.com/cxscode/p/8710149.html

设计模式--外观模式

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

php mysql会员注册_PHP实现会员注册系统

分享一个基于PHP的非常简单基础的注册系统,为了减轻难度没有使用Cookie和Session,数据库大家按照自己需求更改,有问题欢迎联系我。index.htmlTitle注册分开一下登录join_us.html注册页面,发一个表单给add_member.php,使…

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

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

python列表切片赋值_Python中对切片赋值原理分析

有这么个问题::t [1, 2, 3]t[1:1] [7]print t # 输出 [1, 7, 2, 3]谁会对列表这么进行赋值呢?但是对于这个输出结果的原因确实值得去再了解下,今天看看Python的源码,了解下原理是什么。注:本地下载的是Python2.7.6的代码&#…

BZOJ2741 【FOTILE模拟赛】L 【可持久化trie + 分块】

题目 FOTILE得到了一个长为N的序列A&#xff0c;为了拯救地球&#xff0c;他希望知道某些区间内的最大的连续XOR和。 即对于一个询问&#xff0c;你需要求出max(Ai xor Ai1 xor Ai2 ... xor Aj)&#xff0c;其中l<i<j<r。 为了体现在线操作&#xff0c;对于一个询问(x…

php输出mysql的数据结构_php课程 13-43 mysql的数据结构是什么

php课程 13-43 mysql的数据结构是什么一、总结一句话总结&#xff1a;cs结构&#xff0c;客户端&#xff0c;服务器1、常用的比较出名的数据库有哪些&#xff1f;SQL数据库(关系型):1.收费:DB2SqlserverOracle2.开源免费MysqlSqlitePostgresqlNOSQL数据库(非关系型):1.MongoDB(…

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

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

List注意啊

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

python中反斜杠_Python中的正斜杠/与反斜杠\

知识点&#xff1a;1. "/"左倾斜是正斜杠&#xff0c;"\"右倾斜是反斜杠&#xff0c;可以记为&#xff1a;除号是正斜杠2. 对于目录分隔符&#xff0c;Unix和Web用正斜杠/&#xff0c;Windows用反斜杠\。(一)目录中的斜杠python读文件需要输入的目录参数&a…

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

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

是否同一棵二叉搜索树

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

perl mysql dml_MySQL Connector执行SQL语句的三种方式

描述当我们需要在Java程序中与数据库进行交互&#xff0c;可能首先想到的是使用某个ORM框架&#xff0c;因为ORM框架封装了一些实现细节&#xff0c;在使用上非常方便&#xff0c;并且一定程度上可以提升代码稳定性。在ORM框架中&#xff0c;都会依赖MySQL Connector包&#xf…

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

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

mysql数据库设计三大范式_数据库设计三大范式详解

引言数据库的设计范式是数据库设计所需要满足的规范&#xff0c;满足这些规范的数据库是简洁的、结构明晰的&#xff0c;同时&#xff0c;不会发生插入(insert)、删除(delete)和更新(update)操作异常。反之则是乱七八糟&#xff0c;不仅给数据库的编程人员制造麻烦&#xff0c;…

Broadcast简单使用

Activity Service之间的通信单用intent有时候还是不能满足要求&#xff0c;毕竟intent只能在启动一个activity的时候传一点消息过去 这个时候就用到广播了&#xff0c;至此&#xff0c;四大组件Activity Broadcast Service ContentProvider中终于用过三个了。。。当然目前只是…

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

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

Windows + Ubuntu下JDK与adb/android环境变量配置完整教程

假设JDK和android sdk路径分别如下&#xff1a; D:\Program Files\Java\jdkD:\android-sdk 1.JDK环境变量配置JAVA_HOMED:\Program Files\Java\jdk path%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; classpath,;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar &a…