我非常绝望。
我是来自德国,我们得到了元音突变(ä,ü,ö等)。我有一个位置数据库,想要对它进行一些查询。因此,一切正常,当我试图找到“慕尼黑”(你可能知道它是慕尼黑)时,它就破了。一般来说,我使用的是ZF2提供的TableGateways,但它们不是问题(请查看下面的列表)。
基本上它总是搞砸元音突变。 我尝试和检查了什么:
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES UTF8"
(无效)
双重检查数据库排序规则(utf8 general_ci)
检查了我的file_encoding(utf8)
使用iconv
和utf8_de/encode
(无效)
记录飞过的查询
140428 11:59:49 394 Query SET PROFILING=1
394 Query SHOW STATUS
394 Query SHOW STATUS
394 Query SELECT `location`.* FROM `location` WHERE `city` LIKE 'münc%'
394 Query SHOW STATUS
在navicat和终端(工作)上尝试查询
写得快而又脏
mysql_connect(); mysql_query()
- 测试失败了。
编辑mysql配置,使用utf over latin1作为默认字符集。
现在我没有丝毫的线索,我还能做些什么来解决它。
答案 0 :(得分:0)
尝试使用utf8_unicode_ci
归类而不是utf8_general_ci
。 General_ci删除元音和其他特殊字符,并将所有字符翻译为" A"和" U",例如:
ÀÁÅåāă = A
ü = U
utf8_unicode_ci
速度较慢,但可以按照您的预期使用此字符。
<强>更新强>
SQL:
CREATE TABLE `location` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`city` varchar(120) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `location` VALUES (1,'München');
脚本:
$dbh = new PDO('mysql:host=localhost;dbname=test', 'root', 'xxxxx',array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$q = $dbh->prepare("SELECT * FROM `location` WHERE `city` LIKE 'münc%'");
$q->execute();
print_r($q->fetch());
执行:
$ php catalog_mdmtointra.php
Array
(
[id] => 1
[0] => 1
[city] => München
[1] => München
)
<强> UPDATE2:强>
我的版本:
ii percona-server-common-5.5 5.5.33-rel31.1-566.wheezy i386 Percona Server database common files (e.g. /etc/mysql/my.cnf)
ii php5-mysqlnd 5.4.4-14+deb7u2 i386 MySQL module for php5 (Native Driver)