我有以下具有两个名称的数组:
$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'"
但也没有解决重复错误。
最佳答案
MySQL 将 Rodriguez 和 Rodríguez 视为相同的东西,你必须更改你的排序规则。
您可以使用以下方法修复排序规则:
CREATE TABLE Table (...) COLLATE utf8_bin;
关于php - 将 UTF8 名称插入表会出现重复错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51427360/