首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL的INSTR和排序规则

问MySQL的INSTR和排序规则
EN

Stack Overflow用户
提问于 2011-09-13 04:38:38
回答 3查看 1.4K关注 0票数 3

编辑3:好的,忘记下面所有复杂的东西。我的问题很简单:为什么下面结果集的第二列是0,而其他所有列都是1。

代码语言:javascript
复制
SELECT 'a' = 'á',
       INSTR('András','Andras'), 
       'András' LIKE 'Andras',
       INSTR('András','Andräs')

数据库和连接设置为utf8。

结束编辑

我有一个关于MySQL的INSTR函数的问题。我有一个带有排序规则utf8_general_ci的表'values‘和一个包含值'András Schiff’的VARCHAR列' value‘。现在我执行以下查询:

代码语言:javascript
复制
> SET NAMES 'utf8' COLLATE 'utf8_general_ci'
> SELECT 'a' = 'á';
1
> SELECT * FROM values WHERE value LIKE '%Andras%'
'András'
> SELECT * FROM values WHERE INSTR(value,'Andras')
(Empty)
> SELECT * FROM values WHERE INSTR(value,'Andräs')
'András'

有人能解释这种奇怪的行为吗?我认为LIKE '%...%‘和INSTR是等价的,后者的优点是搜索字符串可以包含'%’。

谢谢

编辑:我的MySQL版本是Ver14.14Distrib5.1.54,用于debian-linux-gnu (x86_64),使用readline6.2

编辑2:我注意到的另一件事:

代码语言:javascript
复制
> SELECT * FROM values WHERE INSTR(value,'Andras') COLLATE 'utf8_unicode_ci'

给出错误“排序规则'utf8_unicode_ci‘对于字符集’binary‘无效”。但是我不明白为什么字符集应该是二进制的。

EN

回答 3

Stack Overflow用户

发布于 2011-09-13 05:13:20

对数据库mydb运行此命令

代码语言:javascript
复制
SHOW CREATE DATABASE mydb;

输出示例:

代码语言:javascript
复制
mysql> show create database conversationminer;
+-------------------+------------------------------------------------------------------------------+
| Database          | Create Database                                                              |
+-------------------+------------------------------------------------------------------------------+
| conversationminer | CREATE DATABASE `conversationminer` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+-------------------+------------------------------------------------------------------------------+

1 row in set (0.00 sec)

只需注意数据库的字符集。

另外,执行以下操作

代码语言:javascript
复制
SHOW CREATE TABLE values\G

只需记下表的字符集。

票数 0
EN

Stack Overflow用户

发布于 2013-03-14 02:45:14

我假设这是Mysql中的一个bug。

我有mysql版本“MySQLVer14.14Distrib5.1.67,for redhat-linux-gnu (x86_64) using readline 5.1”,它错误地写着"COLLATION 'utf8_swedish_ci‘is not valid for CHARACTER SET 'binary'“。

在使用"mysql Ver14.14Distrib5.5.27,for Linux (i686) using readline 5.1“的其他服务器上,虽然两者的数据库相同,但没有错误。

所以更新mysql可以解决这个问题。

票数 0
EN

Stack Overflow用户

发布于 2016-10-25 20:05:28

解决与INSTR和COLLATE有关的编辑2部分

下面的语法适用于我

代码语言:javascript
复制
SELECT * FROM values WHERE INSTR(value COLLATE utf8_unicode_ci,'Andras')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7393724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档