php - 将 UTF8 名称插入表会出现重复错误

标签 php mysql pdo character-encoding

我有以下具有两个名称的数组:

$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/

相关文章:

php - 在php中使用重复区域更新多条记录

php - 传递一个值并按顺序调用前一个、当前和下一个值

PHP 无法检索大请求

twig 模板内的 php 函数

未显示 PHP 变量内容

mysql - 无法实例化bean类[org.springframework.batch.core.JobExecution : Is it an abstract class?;

MySQL - 如何有效地对多列进行分页排序

mysql - 我在 SubSonic 3 和 MySQL 的无符号数据类型方面遇到问题

php - 表单未提交到数据库 PHP PDO

php - 使用 PHP 和 PDO 登录用户时遇到问题