当前位置: 首页 > 知识库问答 >
问题:

MySQL-LIKE不适用于“–”

冯星剑
2023-03-14

我在Windows 2012R2上运行MySQL 5.6.26,mysql.ini一切都配置为使用UTF-8 Unicode(utf8)。

[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
[mysql]
default-character-set=utf8
[client]
default-character-set=utf8

我用这张桌子:

CREATE TABLE IF NOT EXISTS `wcf1_guildtool_playerdata` (
  `charID` int(11) NOT NULL,
  `charname` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `realmname` varchar(25) COLLATE utf8_unicode_ci NOT NULL,
  `class` int(11) DEFAULT NULL,
  `race` int(11) DEFAULT NULL,
  `gender` int(11) NOT NULL,
  `level` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

当我执行以下SQL命令时:

SELECT * FROM wcf1_guildtool_playerdata WHERE charname LIKE 'Veneanâr'

数据库会将以下数据返回给我:

118 Veneanar Forscherliga 3 5 0 56

但它不应该返回任何内容,因为“Venean–r”没有条目。

这个问题发生在PHPMyAdmin中的PHP脚本(使用PDO语句)中,甚至在mysql命令行中。

我的PHP脚本检查字符名是否已经存在并执行更新,如果不存在,它会创建一个新条目。我必须创建“Veneanar”和“Veneanâr”,但虽然MySQL声称已经有一个“Veneanâr”(什么不是真的),但脚本用错误的数据更新了条目。

我不明白为什么会这样。我的mysqlhtml" target="_blank">配置有问题吗?

共有3个答案

鲁阳焱
2023-03-14

您不能使用以下内容:

SELECT * FROM wcf1_guildtool_playerdata WHERE charname LIKE 'Venean'+CHAR(131)+'r'

那你为什么要在这里用这个?

这会更有意义:

..WHERE charname LIKE '%Venean'+CHAR(131)+'r'

或者,更好的是:您可以研究HTMLEntities与PHP的使用,以正确编码您的页面并SQL查询。

参考文献http://www.asciitable.com/

参考文献http://php.net/manual/en/function.htmlspecialchars.php

参考文献http://php.net/manual/en/function.htmlentities.php

希望这有帮助!!

竺国兴
2023-03-14

我相信在您的情况下,您可以从列定义中删除COLLATE,并为整个表设置COLLATE=utf8\u bin

CREATE TABLE IF NOT EXISTS `wcf1_guildtool_playerdata` (
  `charID` int(11) NOT NULL,
  `charname` varchar(20) NOT NULL,
  `realmname` varchar(25)  NOT NULL,
  `class` int(11) DEFAULT NULL,
  `race` int(11) DEFAULT NULL,
  `gender` int(11) NOT NULL,
  `level` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

在此处使用表定义和不同的查询:http://sqlfiddle.com/#!9/40907/3

连文栋
2023-03-14

MySQL将âåä视为一个。请参阅留档:

http://dev.mysql.com/doc/refman/5.1/en/charset-collation-effect.html

http://dev.mysql.com/doc/refman/5.1/en/charset-unicode-sets.html

要进行严格的查询,您可以执行以下操作:

SELECT * FROM wcf1_guildtool_playerdata WHERE charname LIKE 'Veneanâr' COLLATE utf8_bin
 类似资料:
  • 我正在Windows 2012R2上运行MySQL 5.6.26,在MySQL.ini中,所有内容都配置为使用UTF-8 Unicode(utf8)。 当我执行以下SQL命令时: 数据库返回给我以下数据: 118威尼斯3 5 0 56

  • 本文向大家介绍MySQL SELECT...LIKE (%),包括了MySQL SELECT...LIKE (%)的使用技巧和注意事项,需要的朋友参考一下 示例 任意位置的“ adm”: 以“ adm”开头: 以“ adm”结尾: 正如%一个字符LIKE条款任意数目的字符匹配,_匹配字符一个字符。例如, 性能说明如果上有一个索引username,则 LIKE 'adm' 执行与`='adm'相同的

  • 我是Spring的新手,我很困惑@CreatedDate注释在实体中是如何工作的。 我做了一次谷歌搜索,有很多解决方案,但除了一个,没有一个适合我。我很困惑为什么? 这是我先试的 它不起作用。我为列中的值获取了NULL。 然后我做了这个。 这实际上将时间戳存储在db中。我的问题是,我遵循的大多数教程都建议我不需要来获取当前时间戳。看起来我确实需要它。我缺少什么吗?

  • 问题内容: 我如何将IN表与like一起使用?这样我就可以在其中使用%了?我的意思是: 我已经尝试过: 但是它给出了错误“操作数应包含1列” 问题答案: 您可以使用许多LIKE表达式: 或者您可以使用正则表达式: 或者,巧妙地

  • 主要内容:带有“%”通配符的查询,带有“_”通配符的查询,LIKE 区分大小写,使用通配符的注意事项和技巧在 MySQL 中, LIKE 关键字主要用于搜索匹配字段中的指定内容。其语法格式如下: [NOT] LIKE  '字符串' 其中: NOT :可选参数,字段中的内容与指定的字符串不匹配时满足条件。 字符串:指定用来匹配的字符串。“字符串”可以是一个很完整的字符串,也可以包含通配符。 LIKE 关键字支持百分号“%”和下划线“_”通配符。 通配符是一种特殊语句,主要用来模糊查询。当不知道真正