manual明确指出“ucs2不能用作客户端字符集,这意味着它不适用于SET NAMES或SET CHARACTER SET”。那么如何插入代码点U + 2193呢?我使用的是PHP 5.3 + PDO。
答案 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的utf8
和ucs2
字符集只覆盖了一个名为Basic Multilingual Plane(BMP)的Unicode子集。 Unicode字符集的世界expanded in MySQL 5.5超出了BMP,但你仍然无法使用ucs2
,新的utf16
或utf32
字符集作为客户端字符集,让你离开仍然坚持使用UTF-8。
答案 1 :(得分:0)
对于后代,CREATE TABLE test (encoding varchar(255) CHARACTER SET ucs2);
然后INSERT INTO test VALUES (1, CHAR(0x2193));
。如果我然后运行SELECT * FROM test
,我会看到向下箭头。