我在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”没有条目。
我的PHP脚本(使用PDO语句)在PHPMyAdmin甚至在mysql命令行中都会出现此问题。
我的PHP脚本检查charname是否已存在并执行更新,否则会创建新条目。我必须创建“Veneanar”和“Veneanâr”,但是当MySQL声称已经存在“Veneanâr”(这不是真的)时,脚本会使用错误的数据更新条目。
我无法理解为什么会这样。我的mysql配置有问题吗?
答案 0 :(得分:1)
MySQL将treatä视为一种。参见文档:
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
答案 1 :(得分:0)
你能不能使用:
SELECT * FROM wcf1_guildtool_playerdata WHERE charname LIKE 'Venean'+CHAR(131)+'r'
你为什么还在这里使用LIKE?
这会更有意义:
..WHERE charname LIKE '%Venean'+CHAR(131)+'r'
或者,更好的是:您可以通过PHP查看HTMLEntities的使用,以正确编码您的页面和SQL查询。
参考。 http://www.asciitable.com/
参考。 http://php.net/manual/en/function.htmlspecialchars.php
参考。 http://php.net/manual/en/function.htmlentities.php
希望这会有所帮助!!
答案 2 :(得分:0)
我相信您可以从列定义中删除COLLATE
并为整个表设置COLLATE=utf8_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