【发布时间】:2018-07-19 16:08:19
【问题描述】:
我有以下两个名称的数组:
$x = ['Rodriguez', 'Rodríguez'];
现在,我要做的是将这些值插入到我的表中,如下所示
Collation: utf8mb4_unicode_520_ci
Engine: InnoDB
[id(primary_ai) - name(unique)]
我确实使用以下方式连接到数据库:
<?php
try {
$pdo = new PDO("mysql:host=localhost;dbname=database;charset=utf8mb4;", 'root', 'root', [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false
]);
} catch (PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
我尝试像这样插入
$paras = $x
$pdo->prepare("INSERT INTO names (name) VALUES (?), (?)")->execute($paras);
但我不断收到错误
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'Rodríguez' for key 'name'
我该如何准确处理这个编码问题?
我尝试使用utf8_encode(),但第二个名称更改为RodrÃguez,然后尝试utf8_decode(),但得到Rodr�guez,然后尝试添加PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'",但也没有解决重复错误。
【问题讨论】:
-
如您所见,编码/解码函数可能会使事情变得更糟。这两个名字拼写不同;一个有一个普通的字母
i,另一个有一个精确的 i (í)。但是排序规则说两个 i 都被平等对待。
标签: php mysql pdo character-encoding