我在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">配置有问题吗?
您不能使用以下内容:
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
希望这有帮助!!
我相信在您的情况下,您可以从列定义中删除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
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 关键字支持百分号“%”和下划线“_”通配符。 通配符是一种特殊语句,主要用来模糊查询。当不知道真正