Я собираюсь создать проект, включающий базу данных с многоязыковой поддержкой, поэтому я решил использовать кодировку 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: если набор символов базы данных или набор символов таблицы определены правильно - нужны ли мне вышеуказанные команды?
- они заменяют вариант запуска выше? Или они используются для уточнения переключателя?
Больше вопросов:
Если набор символов определен (как utf8) в файле MySQL-INI, есть ли необходимость использовать одну из вышеупомянутых команд и переключателей?
Если набор символов не определен или отличается от utf8 (может быть, я не могу его контролировать), достаточно ли создать базу данных с кодировкой utf8? И опустить любой переключатель набора символов в операторах create и connect?
Если определение набора символов невозможно для базы данных, достаточно ли этого для таблицы или нужно определить его для каждого поля 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 определен для таблицы И для текстовых полей - разве это не избыточно?
Спасибо за любые разъяснения.