Почему по умолчанию character_set_server является latin1?

Я использую MySQL 5.5, и когда я показываю переменные о charset, у меня есть

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

Мне нужно изменить character_set_database и character_set_server в utf8?

11 голосов | спросил Yoga 1 SatEurope/Moscow2012-12-01T09:06:22+04:00Europe/Moscow12bEurope/MoscowSat, 01 Dec 2012 09:06:22 +0400 2012, 09:06:22

1 ответ


8

Подумайте об этом:

  • Вы сохраняете данные в базе данных как latin1
  • Данные обрабатываются внутри mysqld как latin1

Если данные, поступающие из ОС или из соединения, это utf8, как mysqld будет обрабатывать его?

Вместо того, чтобы угадывать или надеяться на лучшее, вы можете изменить поведение входящего набора символов. За исключением information_schema и mysql, возьмите все свои базы данных и установите набор символов по умолчанию: utf8:

ALTER DATABASE dbname CHARACTER SET utf8;

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

ALTER DATABASE dbname COLLATE 'utf8_general_ci';

Ниже приведены сортировки на выбор:

mysql> select * from information_schema.collations where CHARACTER_SET_NAME = 'utf8';
+--------------------+--------------------+-----+------------+-------------+---------+
| COLLATION_NAME     | CHARACTER_SET_NAME | ID  | IS_DEFAULT | IS_COMPILED | SORTLEN |
+--------------------+--------------------+-----+------------+-------------+---------+
| utf8_general_ci    | utf8               |  33 | Yes        | Yes         |       1 |
| utf8_bin           | utf8               |  83 |            | Yes         |       1 |
| utf8_unicode_ci    | utf8               | 192 |            | Yes         |       8 |
| utf8_icelandic_ci  | utf8               | 193 |            | Yes         |       8 |
| utf8_latvian_ci    | utf8               | 194 |            | Yes         |       8 |
| utf8_romanian_ci   | utf8               | 195 |            | Yes         |       8 |
| utf8_slovenian_ci  | utf8               | 196 |            | Yes         |       8 |
| utf8_polish_ci     | utf8               | 197 |            | Yes         |       8 |
| utf8_estonian_ci   | utf8               | 198 |            | Yes         |       8 |
| utf8_spanish_ci    | utf8               | 199 |            | Yes         |       8 |
| utf8_swedish_ci    | utf8               | 200 |            | Yes         |       8 |
| utf8_turkish_ci    | utf8               | 201 |            | Yes         |       8 |
| utf8_czech_ci      | utf8               | 202 |            | Yes         |       8 |
| utf8_danish_ci     | utf8               | 203 |            | Yes         |       8 |
| utf8_lithuanian_ci | utf8               | 204 |            | Yes         |       8 |
| utf8_slovak_ci     | utf8               | 205 |            | Yes         |       8 |
| utf8_spanish2_ci   | utf8               | 206 |            | Yes         |       8 |
| utf8_roman_ci      | utf8               | 207 |            | Yes         |       8 |
| utf8_persian_ci    | utf8               | 208 |            | Yes         |       8 |
| utf8_esperanto_ci  | utf8               | 209 |            | Yes         |       8 |
| utf8_hungarian_ci  | utf8               | 210 |            | Yes         |       8 |
| utf8_sinhala_ci    | utf8               | 211 |            | Yes         |       8 |
+--------------------+--------------------+-----+------------+-------------+---------+
22 rows in set (0.03 sec)

Вы также можете запустить

mysql> show collation where charset='utf8';
+--------------------+---------+-----+---------+----------+---------+
| Collation          | Charset | Id  | Default | Compiled | Sortlen |
+--------------------+---------+-----+---------+----------+---------+
| utf8_general_ci    | utf8    |  33 | Yes     | Yes      |       1 |
| utf8_bin           | utf8    |  83 |         | Yes      |       1 |
| utf8_unicode_ci    | utf8    | 192 |         | Yes      |       8 |
| utf8_icelandic_ci  | utf8    | 193 |         | Yes      |       8 |
| utf8_latvian_ci    | utf8    | 194 |         | Yes      |       8 |
| utf8_romanian_ci   | utf8    | 195 |         | Yes      |       8 |
| utf8_slovenian_ci  | utf8    | 196 |         | Yes      |       8 |
| utf8_polish_ci     | utf8    | 197 |         | Yes      |       8 |
| utf8_estonian_ci   | utf8    | 198 |         | Yes      |       8 |
| utf8_spanish_ci    | utf8    | 199 |         | Yes      |       8 |
| utf8_swedish_ci    | utf8    | 200 |         | Yes      |       8 |
| utf8_turkish_ci    | utf8    | 201 |         | Yes      |       8 |
| utf8_czech_ci      | utf8    | 202 |         | Yes      |       8 |
| utf8_danish_ci     | utf8    | 203 |         | Yes      |       8 |
| utf8_lithuanian_ci | utf8    | 204 |         | Yes      |       8 |
| utf8_slovak_ci     | utf8    | 205 |         | Yes      |       8 |
| utf8_spanish2_ci   | utf8    | 206 |         | Yes      |       8 |
| utf8_roman_ci      | utf8    | 207 |         | Yes      |       8 |
| utf8_persian_ci    | utf8    | 208 |         | Yes      |       8 |
| utf8_esperanto_ci  | utf8    | 209 |         | Yes      |       8 |
| utf8_hungarian_ci  | utf8    | 210 |         | Yes      |       8 |
| utf8_sinhala_ci    | utf8    | 211 |         | Yes      |       8 |
+--------------------+---------+-----+---------+----------+---------+
22 rows in set (0.00 sec)

mysql>

Чтобы увидеть отдельные кодировки базы данных, выполните следующие действия:

mysql> show create database sample;
+----------+-------------------------------------------------------------------+
| Database | Create Database                                                   |
+----------+-------------------------------------------------------------------+
| sample   | CREATE DATABASE `sample` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+-------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql>

Что касается настроек, вы можете попробовать следующее:

Добавьте строки в my.cnf

[mysqld]
character_set_database=utf8
character_set_server=utf8

, затем перезапустите mysql

Я обсуждал это снова 1 августа 2011 года: Характер Установите кодировку в таблицу

CAVEAT (для MySQL DB Servers в Windows)

Эти команды

ALTER DATABASE dbname CHARACTER SET utf8;
ALTER DATABASE dbname COLLATE 'utf8_general_ci';

не работают в версии Windows MySQL из-за того, как Windows блокирует файлы. Необходимый файл называется db.opt, который находится в подпапке базы данных в datadir.

Возможно, вам придется сделать следующее:

  • mysqldump в этой базе данных (без создания базы данных, просто создания таблицы и INSERT)
  • удалить эту базу данных
  • создать базу данных с определенной кодировкой и сортировкой
  • перезагрузка в дампе в нее

Эпилог

Независимо от того, что вы делаете, выполните любые изменения на Dev /Staging Server, чтобы узнать, получаете ли вы нужные эффекты.

ОБНОВЛЕНИЕ 2012-12-05 11:00 EDT

Ваши вопросы

  

Должен ли я действительно изменить его?

Чтобы гарантировать правильное обращение с данными, вы можете захотеть убедиться, что у вас есть яблоки для яблок. Данные, подготовленные в виде одной кодировки и загрузки ее в таблицу с базой данных, возможно, выравнивающей данные, как если бы она увидела другую кодировку, вероятно, не отображали данные с помощью набора символов mysqld при получении и отправке обратно в соединение БД. Попробуйте загрузить базу данных на Dev /Staging Server и поэкспериментируйте с настройками кодировок по умолчанию.

  

Почему некоторые значения по умолчанию используют utf8, но по умолчанию используется latin1?

Это будет зависеть от версии операционной системы MySQL Binary. В версиях Windows может быть latin1, в то время как версии Linux могут использовать utf8

ответил RolandoMySQLDBA 5 WedEurope/Moscow2012-12-05T01:24:46+04:00Europe/Moscow12bEurope/MoscowWed, 05 Dec 2012 01:24:46 +0400 2012, 01:24:46

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132