使用以下脚本可以很容易地测试它:
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'test', '');
$pdo->exec("
drop table if exists utf8_test;
create table utf8_test(
conn varchar(50) collate ascii_bin,
column_latin1 varchar(50) collate latin1_general_ci,
column_utf8 varchar(50) collate utf8_unicode_ci,
column_utf8mb4 varchar(50) collate utf8mb4_unicode_ci
);
");
$latin = 'abc äŒé';
$utf8 = '??';
$mb4 = ' ';
$pdo->exec("set names utf8");
$pdo->exec("
insert into utf8_test(conn, column_latin1, column_utf8, column_utf8mb4)
values ('utf8', '$latin', '$latin $utf8', '$latin $utf8 $mb4')
");
$pdo->exec("set names utf8mb4");
$pdo->exec("
insert into utf8_test(conn, column_latin1, column_utf8, column_utf8mb4)
values ('utf8mb4', '$latin', '$latin $utf8', '$latin $utf8 $mb4')
");
$result = $pdo->query('select * from utf8_test')->fetchAll(PDO::FETCH_ASSOC);
var_export($result);
Run Code Online (Sandbox Code Playgroud)
结果如下:
array (
0 =>
array (
'conn' => 'utf8',
'column_latin1' => 'abc äŒé',
'column_utf8' => 'abc äŒé ??',
'column_utf8mb4' => 'abc äŒé ?? ???? ????',
),
1 =>
array (
'conn' => 'utf8mb4',
'column_latin1' => 'abc äŒé',
'column_utf8' => 'abc äŒé ??',
'column_utf8mb4' => 'abc äŒé ?? ',
),
)
Run Code Online (Sandbox Code Playgroud)
如您所见,utf8在使用utf8mb4列时,我们不能将其用作连接字符集(请参阅参考资料????)。但是utf8mb4在使用utf8列时我们可以使用连接。同样,写入latin或读取或读取ascii列也没有问题。
原因是,你可以编码任何utf8,latin或ascii字符utf8mb4而不是周围的其他方式。因此utf8mb4,在这种情况下,将字符集用作连接是安全的。
| 归档时间: |
|
| 查看次数: |
1252 次 |
| 最近记录: |