Как вставить данные UCS-2 с PHP PDO в MySQL? - PullRequest
1 голос
/ 29 августа 2011

В руководстве четко указано, что «ucs2 нельзя использовать в качестве клиентского набора символов, что означает, что он не работает для SET NAMES или SET CHARACTER SET».Так, как я могу вставить, например, кодовую точку U + 2193?Я использую PHP 5.3 + PDO.

Ответы [ 2 ]

2 голосов
/ 29 августа 2011

Если вы хотите использовать Unicode для связи с сервером MySQL, ваш единственный вариант - использовать UTF-8.

Если вы сейчас работаете со строками UCS-2 или UTF-16 в PHP,вам придется конвертировать их в UTF-8, прежде чем пытаться сохранить их.Также обратите внимание, что MySQL вернет вам UTF-8, если это то, что вы установили в свой клиентский набор символов, поэтому вам нужно будет также конвертировать результаты запроса, если вы привержены работе с UCS-2 на стороне PHP.(Если у вас есть возможность вносить большие изменения, вам, вероятно, было бы лучше просто везде использовать UTF-8, чем выполнять все эти дополнительные преобразования.)

Что касается хранения кодовой точки U + 2193, то нетБеспокойство: UTF-8 может представлять каждую кодовую точку Unicode (в данном конкретном случае это будет 0xE2 0x86 0x93).

Технически, это немного обманывает, так как MySQL utf8 и ucs2 наборы символовохватывает только поднабор Unicode, называемый базовой многоязычной плоскостью (BMP).Мир кодировок Unicode расширен в MySQL 5.5 , чтобы выйти за пределы BMP, но вы все еще не можете использовать ucs2, новые utf16 или utf32 кодировки в качестве клиентских наборов, оставляя вас по-прежнемузастрял с UTF-8.

0 голосов
/ 29 августа 2011

Для потомков CREATE TABLE test (encoding varchar(255) CHARACTER SET ucs2);, а затем INSERT INTO test VALUES (1, CHAR(0x2193));. Если я затем запускаю SELECT * FROM test, я вижу стрелку вниз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...