MySQLi устанавливает стандартную кодировку utf-8 [duplicate]

Я отвечу ужасным, нарисованным рукой комиком. Второе изображение является причиной того, что result является undefined в вашем примере кода.

301
задан Peter Mortensen 1 August 2014 в 01:12
поделиться

16 ответов

Чтобы установить значение по умолчанию для UTF-8, вы хотите добавить следующее в my.cnf

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8


[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

Если вы хотите изменить набор символов для существующей БД, сообщите мне. ваш вопрос не указал его напрямую, поэтому я не уверен, что это то, что вы хотите сделать.

384
ответ дан Michal M 27 August 2018 в 07:32
поделиться

Для последней версии MySQL

default-character-set = utf8

вызывает проблему.

Как говорится в , Джастин Бал говорит в « Обновление до MySQL 5.5.12, и теперь MySQL не запустится , вы должны:

  1. Удалите эту директиву, и вы должны быть хорошими.
  2. Тогда ваш файл конфигурации (например, /etc/my.cnf) должен выглядеть так:
    [mysqld]
    collation-server = utf8_unicode_ci
    init-connect='SET NAMES utf8'
    character-set-server = utf8
    
  3. Перезагрузите MySQL.
  4. Для обеспечения того, что ваш MySQL является UTF-8, запустите в запросе MySQL следующие запросы: Первый запрос:
     mysql> show variables like 'char%';
    
    Результат должен выглядеть так:
     +--------------------------+---------------------------------+
     | Variable_name            | Value                           |
     +--------------------------+---------------------------------+
     | character_set_client     | utf8                            |
     | character_set_connection | utf8                            |
     | character_set_database   | utf8                            |
     | character_set_filesystem | binary                          |
     | character_set_results    | utf8                            |
     | character_set_server     | utf8                            |
     | character_set_system     | utf8                            |
     | character_sets_dir       | /usr/local/mysql/share/charsets/|
     +--------------------------+---------------------------------+
    
    Второй запрос:
     mysql> show variables like 'collation%';
    
    И вывод запроса:
     +----------------------+-----------------+
     | Variable_name        | Value           |
     +----------------------+-----------------+
     | collation_connection | utf8_general_ci |
     | collation_database   | utf8_unicode_ci |
     | collation_server     | utf8_unicode_ci |
     +----------------------+-----------------+
    
241
ответ дан Peter Mortensen 27 August 2018 в 07:32
поделиться

У этого вопроса уже много ответов, но Матиас Биненс упомянул, что вместо utf8 следует использовать «utf8mb4», чтобы иметь лучшую поддержку UTF-8 («utf8» не поддерживает 4 байтовых символа, поля усечен на вставке ). Я считаю это важным отличием. Итак, вот еще один ответ о том, как установить набор символов и сортировку по умолчанию. Это позволит вам вставить кучу poo (

41
ответ дан 4 revs 27 August 2018 в 07:32
поделиться

NijaCat был близок, но указанный overkill:

Чтобы установить значение по умолчанию для UTF-8, вы хотите добавить следующее в my.cnf

[client]
default-character-set=utf8

[mysqld]
default-character-set = utf8

Затем, чтобы проверьте:

mysql> show variables like "%character%";show variables like "%collation%";

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)
22
ответ дан Derek 27 August 2018 в 07:32
поделиться

В Xubuntu 12.04 я просто добавил

[mysqld]
character_set_server = utf8

в /etc/mysql/my.cnf

И результат

mysql> show variables like "%character%";show variables like "%collation%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)

Также взгляните на http://dev.mysql.com/doc/refman/5.6/en/charset-server.html

9
ответ дан Falko 27 August 2018 в 07:32
поделиться

Все приведенные здесь настройки верны, но вот наиболее оптимальное и достаточное решение:

[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
character-set-server = utf8
collation-server = utf8_unicode_ci

[client]
default-character-set = utf8

Добавьте их в /etc/mysql/my.cnf.

Обратите внимание: я выбираю utf8_unicode_ci тип сопоставления из-за проблемы с производительностью.

Результат:

mysql> SHOW VARIABLES LIKE 'character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_unicode_ci |
| collation_database   | utf8_unicode_ci |
| collation_server     | utf8_unicode_ci |
+----------------------+-----------------+

И это когда вы подключаетесь как пользователь, не являющийся SUPER!

Для Например, разница между подключением как SUPER и не SUPER пользователем (конечно, в случае установки utf8_unicode_ci):

пользователь с SUPER priv .:

mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci | <---
| collation_database   | utf8_unicode_ci |
| collation_server     | utf8_unicode_ci |
+----------------------+-----------------+

пользователь с не- SUPER priv.:

mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_unicode_ci |
| collation_database   | utf8_unicode_ci |
| collation_server     | utf8_unicode_ci |
+----------------------+-----------------+

Я написал всеобъемлющую статью (rus), в которой подробно объясняется, почему вы должны использовать тот или иной вариант. Все типы наборов символов и их сортировки рассматриваются: для сервера, для базы данных, для соединения, для таблицы и даже для столбца.

Надеюсь, что это и статья помогут прояснить неясные моменты.

9
ответ дан gahcep 27 August 2018 в 07:32
поделиться

MySQL 5.5, все, что вам нужно:

[mysqld]
character_set_client=utf8
character_set_server=utf8
collation_server=utf8_unicode_ci

collation_server является необязательным.

mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
1
ответ дан Gajus 27 August 2018 в 07:32
поделиться

MySQL v5.5.3 и выше:

Просто добавьте три строки только в раздел [mysqld]:

[mysqld]
character-set-server = utf8
collation-server = utf8_unicode_ci
skip-character-set-client-handshake

Примечание. Включение skip-character-set-client-handshake здесь устраняет необходимость включают в себя init-connect в [mysqld] и default-character-set в разделах [client] и [mysql].

20
ответ дан Justin Watt 27 August 2018 в 07:32
поделиться

Директива изменилась на character-set-system=utf8

http://dev.mysql.com/doc/refman/5.6/en/charset-configuration.html

5
ответ дан Loren 27 August 2018 в 07:32
поделиться

Если вы сбиты с толку вашей настройкой для клиента, а соединение сбрасывается после перезапуска службы mysql. Попробуйте выполнить следующие шаги (которые работали для меня):

  1. vi /etc/my.cnf
  2. добавить удар по содержимому и :wq [client] character-sets-dir=/usr/local/mysql/share/mysql/charsets
  3. перезапустить mysql и войти в систему mysql , используйте базу данных, команду ввода status;, вы увидите, что набор символов для «client» и «conn» установлен на «utf8».

Проверьте ссылку для получения дополнительной информации.

1
ответ дан mathielo 27 August 2018 в 07:32
поделиться

Если у вас возникли проблемы с подтверждением поддержки набора символов клиента с помощью MySQL Workbench, обратите внимание на следующее примечание:

Важно. Все подключения, открытые MySQL Workbench, автоматически устанавливают набор символов клиента utf8 , Вручное изменение набора символов клиента, например, с помощью SET NAMES ..., может привести к тому, что Workbench MySQL не будет правильно отображать символы. Дополнительные сведения о наборах клиентских символов см. В разделе «Наборы символов соединения и сортировки».

Таким образом, я не смог переопределить наборы символов MySQL Workbench с изменениями my.cnf. например 'set names utf8mb4'

1
ответ дан paiego 27 August 2018 в 07:32
поделиться

Изменить символ MySQL:

Клиент

default-character-set=utf8

mysqld

character_set_server=utf8

Мы не должны писать default-character-set=utf8 в mysqld, потому что это может привести к в ошибке:

start: Не удалось запустить задание

Наконец:

 +--------------------------+----------------------------+
 | Variable_name            | Value                      |
 +--------------------------+----------------------------+
 | character_set_client     | utf8                       |
 | character_set_connection | utf8                       |
 | character_set_database   | utf8                       |
 | character_set_filesystem | binary                     |
 | character_set_results    | utf8                       |
 | character_set_server     | utf8                       |
 | character_set_system     | utf8                       |
 | character_sets_dir       | /usr/share/mysql/charsets/ |
 +--------------------------+----------------------------+
23
ответ дан Peter Mortensen 27 August 2018 в 07:32
поделиться

В Fedora 21

$ vi /etc/my.cnf

Добавить следующее:

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci 
skip-character-set-client-handshake

Сохранить и выйти.

Заключительное помните перезапуск службы mysqld с service mysqld restart.

3
ответ дан Tieme 27 August 2018 в 07:32
поделиться

В MySQL 5.5 у меня есть в my.cnf

[mysqld] 
init_connect='SET collation_connection = utf8_unicode_ci' 
init_connect='SET NAMES utf8' 
character-set-server=utf8 
collation-server=utf8_unicode_ci 
skip-character-set-client-handshake

Результат

mysql> show variables like "%character%";show variables like "%collation%";

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_unicode_ci |
| collation_database   | utf8_unicode_ci |
| collation_server     | utf8_unicode_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)
53
ответ дан tomazzlender 27 August 2018 в 07:32
поделиться

Примечание: файл my.cnf находится в /etc/mysql/

. После добавления этих строк:

[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
skip-character-set-client-handshake

[client]
default-character-set   = utf8

[mysql]
default-character-set   = utf8

Не забудьте перезапустить сервер:

sudo service mysql restart
22
ответ дан М.Б. 27 August 2018 в 07:32
поделиться

Вы можете сделать это так, как он есть, и если он не работает, вам нужно перезапустить mysql.

0
ответ дан 郭浩伟 27 August 2018 в 07:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: