编辑3:好的,忘记下面所有复杂的东西。我的问题很简单:为什么下面结果集的第二列是0,而其他所有列都是1。
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‘。现在我执行以下查询:
> 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:我注意到的另一件事:
> SELECT * FROM values WHERE INSTR(value,'Andras') COLLATE 'utf8_unicode_ci'给出错误“排序规则'utf8_unicode_ci‘对于字符集’binary‘无效”。但是我不明白为什么字符集应该是二进制的。
发布于 2011-09-13 05:13:20
对数据库mydb运行此命令
SHOW CREATE DATABASE mydb;输出示例:
mysql> show create database conversationminer;
+-------------------+------------------------------------------------------------------------------+
| Database | Create Database |
+-------------------+------------------------------------------------------------------------------+
| conversationminer | CREATE DATABASE `conversationminer` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+-------------------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)只需注意数据库的字符集。
另外,执行以下操作
SHOW CREATE TABLE values\G只需记下表的字符集。
发布于 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可以解决这个问题。
发布于 2016-10-25 20:05:28
解决与INSTR和COLLATE有关的编辑2部分
下面的语法适用于我
SELECT * FROM values WHERE INSTR(value COLLATE utf8_unicode_ci,'Andras')https://stackoverflow.com/questions/7393724
复制相似问题