php:ubuntu上的pdo utf8mb4配置错误?

时间:2014-06-22 12:22:56

标签: php mysql ubuntu pdo ubuntu-12.04

我有一个mysql数据库,所有表都设置为utf8_bin。其上的表有两个字段再次设置为utf8_bin。我创建了一个存储过程:SELECT name,id FROM tools WHERE valid=1 AND source in (1,2,3) AND name LIKE CONCAT('%',inValue,'%') COLLATE utf8_unicode_ci LIMIT 100; 我使用查询搜索字段来获取所有可能的工具(例如," sc"返回螺丝刀,SCRewdriver,somethingscrew)。 该查询在窗口7下的wampserver安装中运行良好。我尝试在Ubuntu 12.04上导入数据库,并且存储过程不返回任何内容。 如果我在其中运行查询,我会得到结果。如果我在phpmyadmin上运行存储过程,我会得到一个奇怪的错误:

#1253 - COLLATION 'utf8_unicode_ci' is not valid for CHARACTER SET 'utf8mb4' 

我无处设置utf8mb4。我也不明白为什么我不能在我在PHP上运行完美无缺的PHP代码上运行sql查询。

这是代码:

$q = "call getTools(?)";
$ing = "%$tll%";
try {
     $statement = self::$_conn->prepare($q);
 $statement->bindParam(1,$ing);
 $statement->execute();
} catch (PDOException $e) {
     echo $e->getMessage();
}
/* fetch values */
while ($row = $statement->fetch(PDO::FETCH_NUM)) {
  //printf ("%s (%s)\n", $name, $idIng);        
  array_push($return,array('label'=>$row[0],'value'=>$row[0],'id'=>$row[1]));
}
return json_encode($return);

请注意,稍后添加了try / catch以了解它为什么不起作用。我强烈怀疑问题出在PDO或Ubuntu 12.04下的配置上。

在构造函数上我定义了utf8

$dsn = "mysql:dbname=$dbname;host=$server;charset=utf8";

关于如何解决这个问题的任何想法?

编辑:表格创建脚本

DROP TABLE IF EXISTS `tools`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `tools` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `url` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `valid` int(11) NOT NULL DEFAULT '1' COMMENT '0= invalid 1=valid',
  `source` int(11) NOT NULL COMMENT '1=wikibooks 2 hand 3 hand similar',
  `parent` int(11) DEFAULT '0' COMMENT 'similar tool.',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6206 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='1=wikibooks 2 hand 3 hand sim';
/*!40101 SET character_set_client = @saved_cs_client */;

编辑:在PDO中添加了允许例外的行。 (DOH)

self::$_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

因此,我的php脚本出错:

SQLSTATE[42000]: Syntax error or access violation: 1253 COLLATION 'utf8_unicode_ci' is not valid for CHARACTER SET 'latin1'

表格不是latin1。

0 个答案:

没有答案