Где определить наборы символов MySQL - PullRequest
2 голосов
/ 23 марта 2012

Я собираюсь создать проект, включающий базу данных с многоязыковой поддержкой, поэтому я решил использовать кодировку UTF-8.

Но я не уверен, где определить кодировку. Просматривая веб-страницы и особенно на этом форуме, я обнаружил несколько подсказок, но мне все еще не хватает некоторых основ.

Существует несколько уровней, на которых можно определить набор символов:

  • OS Wide
  • Широкий диапазон MySQL: в файле MySQL-INI и в файле php.ini
  • для базы данных: в операторе создания
  • для таблицы: в операторе создания
  • для столбца: в операторе создания
  • подключение к mysql: с ключом --default-set-set = UTF8

Мне не понятно, что именно установлено с помощью этого переключателя

  • - это текстовые столбцы вновь созданных таблиц, или
  • выполняются ли преобразования при извлечении текстовых данных?
  • или что-то еще?
  • необходимо ли это, если набор символов по умолчанию = UTF8 используется в my.ini, в существующей базе данных или в существующих таблицах?

Q1: мне нужно кое-что прояснить.

В MySQL существует множество методов для установки кодировок:

  • набор символов
  • set character_set_client
  • set character_set_results
  • set character_set_connection
  • установить имена

Q2: если набор символов базы данных или набор символов таблицы определены правильно - нужны ли мне вышеуказанные команды? - они заменяют вариант запуска выше? Или они используются для уточнения переключателя?

Больше вопросов:

  1. Если набор символов определен (как utf8) в файле MySQL-INI, есть ли необходимость использовать одну из вышеупомянутых команд и переключателей?

  2. Если набор символов не определен или отличается от utf8 (может быть, я не могу его контролировать), достаточно ли создать базу данных с кодировкой utf8? И опустить любой переключатель набора символов в операторах create и connect?

  3. Если определение набора символов невозможно для базы данных, достаточно ли этого для таблицы или нужно определить его для каждого поля char / varchar / text?

Я видел подобные операторы создания таблиц (пример проекта NetBeans 'TodoList'):

CREATE TABLE `todo` (
    ...
    `title` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
    `description` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL,
    `comment` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL,
    `status` ENUM('PENDING', 'DONE', 'VOIDED') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'PENDING',
    ...
) ENGINE = MYISAM DEFAULT CHARSET=utf8;

Q6: CHARSET определен для таблицы И для текстовых полей - разве это не избыточно?

Спасибо за любые разъяснения.

1 Ответ

0 голосов
/ 23 марта 2012

Q1 - завершить сценарий подключения с помощью: mysql_query ("SET NAMES utf8");
Q2 - да.Если вы не используете эту настройку, вы можете получить вывод в зависимости от настроек хостинга (php ini), где может быть задана кодировка символов по умолчанию.
Q3 - нет.Набор символов по умолчанию для таблиц, полей может иметь собственную или чаще всего узкую спецификацию (языковые различия сортировки и т. Д.).

...