如何将PHP PDO中的UCS-2数据插入MySQL?

时间:2011-08-28 22:18:29

标签: php mysql unicode pdo

manual明确指出“ucs2不能用作客户端字符集,这意味着它不适用于SET NAMES或SET CHARACTER SET”。那么如何插入代码点U + 2193呢?我使用的是PHP 5.3 + PDO。

2 个答案:

答案 0 :(得分:2)

如果您想使用Unicode与MySQL服务器通信,您唯一的选择是使用UTF-8。

如果你现在在PHP中使用UCS-2或UTF-16字符串,你必须在尝试存储它们之前将它们转换为UTF-8。另请注意,如果您将客户端字符集设置为,MySQL将返回UTF-8,因此如果您承诺在PHP端使用UCS-2,则还需要转换查询结果。 (如果你能够做出更大的改变,你可能最好只使用UTF-8,而不是进行所有这些额外的转换。)

至于存储代码点U + 2193,不用担心:UTF-8可以代表每个Unicode代码点(在这种特定情况下,它是0xE2 0x86 0x93)。

从技术上讲,这有点捏造,因为MySQL的utf8ucs2字符集只覆盖了一个名为Basic Multilingual Plane(BMP)的Unicode子集。 Unicode字符集的世界expanded in MySQL 5.5超出了BMP,但你仍然无法使用ucs2,新的utf16utf32字符集作为客户端字符集,让你离开仍然坚持使用UTF-8。

答案 1 :(得分:0)

对于后代,CREATE TABLE test (encoding varchar(255) CHARACTER SET ucs2);然后INSERT INTO test VALUES (1, CHAR(0x2193));。如果我然后运行SELECT * FROM test,我会看到向下箭头。