2014-12-09 3 views
1

Этот запрос работает отлично:Как заставить MySQL character_set_connection работать с utf16?

set character_set_client = utf8 

То же самое касается utf8mb4, big5, dec8, cp850, hp8, koi8r, latin1, latin2, swe7, ascii, ujis, sjis, hebrew, etc.

Однако, когда я попытался set character_set_client = utf16 или set character_set_client = utf32, они не работают:

# 1231 - Переменная 'character_set_client' не может быть установлен в значение '' utf16

# 1231 - Переменная 'character_set_client' не может быть установлена ​​на значение 'utf32'

Почему команды не работают?

Как мы можем сделать MySQL character_set_client работать с utf16/32?

+0

Mysql версия? Как говорит mysql: MySQL 5.5.3. является минимальным для этого –

+0

@MarcoMura, Mine - это «5.5.40-0ubuntu0.12.04.1'. Документация MySQL, указанная только в 'ucs2', не может быть использована: http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_character_set_connection. weird eh, я подозреваю, что это многобайтовая вещь, хотя документы MySQL серьезно не документированы. – Pacerier

+0

Это не узнает. Вопрос: Вы запускаете эту команду из клиента mysql или с помощью php-кода? –

ответ

1

Вы не можете.

MySQL документы только заявил ucs2 не могут быть использованы:

Это ссылка +5,0 док. 5,5 says:

ucs2, utf16 и UTF32 не могут быть использованы в качестве клиентского набора символов

и 5,6 добавляет utf16le. По сути MySQL ожидает, что запросы будут в кодировке, совместимой с ASCII, каждая версия doc представляет собой несовместимые с ASCII кодировки, о которых знает MySQL.

Есть ли какая-то особая причина, по которой вы предпочитаете использовать UTF-16? Это, как правило, плохой выбор для чего угодно, кроме общения с другими средами UTF-16 (Win32 API, Java и т. Д.).

+0

Итак, в основном вы подразумеваете, что все многобайтовые кодировки «запрещены»? – Pacerier

+0

Не многобайтовые точно-UTF-8, Big-5 и Shift-JIS - все поддерживаемые многобайтовые кодировки, например. Но кодировка должна кодировать символы ASCII в первые 128 байтов, которые UTF-16/32 не делают из-за всех нулевых байтов. – bobince

+0

'character_set_client' просто устанавливает кодировку для операторов, поступающих от клиента, почему они должны быть совместимы с ascii? Я не вижу вреда в разрешении утверждений в utf16/32. – Pacerier

Смежные вопросы