我有以下两个名字的数组:
$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'"
,但没有也不能解决重复的错误。
答案 0 :(得分:1)
您需要从数据库中删除唯一限制,否则必须使用其他一些编码来识别i和í之间的差异。
答案 1 :(得分:1)
MySQL将Rodriguez和Rodríguez当作同一件事,您必须更改排序规则。
您可以使用以下方法修复排序规则:
CREATE TABLE Table (...) COLLATE utf8_bin;