2015-07-10 6 views
2

У меня есть PHP 5.5.9 и MySQL 5.5.43 Innodb. Это находится в Kubuntu LTS /etc/mysql/my.cnfmysql change набор символов по умолчанию latin1 to utf8

printf («Текущий набор символов:% s \ n», mysqli_character_set_name ($ conn));

Текущий набор символов: latin1

Я попытался

по умолчанию-символьный набор = utf8

первый, но тогда мой сервер MySQL не перезапускать

Тогда Я проверено

персональный набор-сервер = utf8

, тогда моя оболочка mysql не началась

Как я могу спасти эту проблему? Мне удалось с init_connect = 'SET NAMES utf8' решить проблему для пользователей nonroot, но набор символов остается тем же (он отображается только как непривилегированные пользователи UTF8, это все еще Latin1).

И если (большой, если) smnd мог сказать мне, где я должен использовать utf8mb4? Также в файле my.cnf? У меня были столы в utf8 и мигрировали те, с которыми я работаю, чтобы utf8mb4 ...

Другой Q: IS, что применимо для сервера (Kubuntu) Linux: https://www.youtube.com/watch?v=3M1Wpw4uOoM

Пожалуйста, помогите мне, спасибо, Грегор от lilaum.com

ответ

0

mysqli_set_charset('utf8').

init_connect игнорируется для root соединений.

utf8mb4 является фактически надмножеством utf8. Это необходимо для китайцев и новых эмози, плюс рассеяние неясных наборов символов.

+0

Можно ли сделать это глобально раз и навсегда? – user1081168

+0

и utf8mb4 - это действительно utf8 ... Я думал, что мне нужно изменить его в mysql, потому что я добавил до php.ini default_charset = «UTF-8» , но это не сработало. Пожалуйста, обновите меня, если (я так считаю) можно изменить эту директиву раз и навсегда для сервера глобально, спасибо ... – user1081168

+0

Глобально ... в 'my.cnf', этот _might_ устанавливает utf8mb4 для _future_ действий:' character_set_server = utf8mb4 'Если у вас есть существующие данные; это нужно будет обрабатывать другими способами. –

2

PHP manual говорит:

MySQLnd всегда предполагает кодировку сервера по умолчанию. Эта кодировка отправляется во время соединения shake/authentication соединения, который будет использоваться mysqlnd.

MySQLnd является родным драйвером MySQL, включенным в PHP 5.4 и выше.

К сожалению, я должен подтвердить, что даже в моей системе (PHP 5.6.17 с MySQL 5.5.47 на Debian Jessie 8.3) несмотря на то, сконфигурировано /etc/mysql/my.cnf со следующими записями

[mysqld] 
character-set-server=utf8 

[mysql] 
default-character-set=utf8 

mysqlnd не кажется, предположить кодировку сервера по умолчанию (utf8), но устанавливает кодировку подключения к latin1 с сортировкой latin1_swedish (может быть, значение по умолчанию рассматривает MySQL AB была шведская компанией).

Итак, кажется, что нет постоянного способа установить кодировку utf8 при подключении к PHP-приложению. Вы должны позвонить по телефону

$mysqli->set_charset("utf8") 

после каждого соединения. Это может быть встроено в пользовательскую функцию «dbconnect» PHP, чтобы обеспечить своего рода уровень абстракции.

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

  • Нет связанных вопросов^_^