PHP将ASCII格式的字符串变量转换为UTF8\u unicode\u ci,保留国家字符
在Laravel中,我必须将数据从MySql上的一个数据库迁移到另一个数据库。 来自第一个MySQl的数据是ASCII格式的,具有国家字符。我必须将这些数据保存在第二个MySql数据库中。第二个数据库的列采用UTF8\U unicode\U ci编码。 从第一个数据库获取数据的代码:PHP将ASCII格式的字符串变量转换为UTF8\u unicode\u ci,保留国家字符,php,mysql,laravel,utf-8,character-encoding,Php,Mysql,Laravel,Utf 8,Character Encoding,在Laravel中,我必须将数据从MySql上的一个数据库迁移到另一个数据库。 来自第一个MySQl的数据是ASCII格式的,具有国家字符。我必须将这些数据保存在第二个MySql数据库中。第二个数据库的列采用UTF8\U unicode\U ci编码。 从第一个数据库获取数据的代码: $pdo = DB::connection('mysqlPDO')->getPdo(); $stmt = $pdo->prepare("SELECT * FR
$pdo = DB::connection('mysqlPDO')->getPdo();
$stmt = $pdo->prepare("SELECT * FROM `form_data` WHERE sent_to_pbox = 0 AND LIMIT 1");
$stmt->execute();
$result = $stmt->fetchAll(\PDO::FETCH_ASSOC);
$stmt->closeCursor();
unset($stmt);
$clientAddressEntity = ClientAddress::create([
'client_id' => $clientEntity->id,
'street' => mb_convert_encoding($importDTO->street, 'ASCII', 'UTF-8'),
'building_no' => utf8_encode($importDTO->building_no),
'post_code' => utf8_encode($importDTO->post_code),
'city' => utf8_encode($importDTO->city),
'country_id' => isset($countryEntity) ? $countryEntity->id : null,
]);
和要保存在第二个数据库中的代码:
$pdo = DB::connection('mysqlPDO')->getPdo();
$stmt = $pdo->prepare("SELECT * FROM `form_data` WHERE sent_to_pbox = 0 AND LIMIT 1");
$stmt->execute();
$result = $stmt->fetchAll(\PDO::FETCH_ASSOC);
$stmt->closeCursor();
unset($stmt);
$clientAddressEntity = ClientAddress::create([
'client_id' => $clientEntity->id,
'street' => mb_convert_encoding($importDTO->street, 'ASCII', 'UTF-8'),
'building_no' => utf8_encode($importDTO->building_no),
'post_code' => utf8_encode($importDTO->post_code),
'city' => utf8_encode($importDTO->city),
'country_id' => isset($countryEntity) ? $countryEntity->id : null,
]);
mb\u convert\u编码
和utf8\u编码
不起作用。波兰语字母如ł、ę、ą等保存在数据库中作为?
第二个数据库中的表如下所示:
CREATE TABLE `client_address` (
`id` int NOT NULL,
`client_id` int DEFAULT NULL,
`street` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`building_no` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`post_code` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`city` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`country_id` int DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`created_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
当我加上: “街道”=>$importDTO->street。”。mb\u检测\u编码($importDTO->street)
我得到的结果是:
Ja?minowa ASCII
这是解决方案,在控制器中我必须添加设置utf8:
$pdo = DB::connection('mysqlPDO')->getPdo();
$pdo->exec("set names utf8");
$stmt = $pdo->prepare("SELECT * FROM .... );
首先删除
utf8\u encode()
。问题的原因可能是您的连接字符集设置为utf8mb4
?根据定义,ASCII没有“国家字符”。我想您指的是旧的不推荐使用的utf8
字符集,而不是ASCII。请确认您真正从哪个字符集迁移,并查看特定于数据库的步骤。确保与两台服务器的连接上的字符集与数据库正在使用的字符集匹配。