Поиск…


декларация

CREATE TABLE foo ( ...
    name CHARACTER SET utf8mb4
    ... );

соединение

Жизненно важным для использования наборов символов является указание MySQL-серверу, что кодирует байты клиента. Вот один из способов:

SET NAMES utf8mb4;

Каждый язык (PHP, Python, Java, ...) имеет свой собственный способ, который обычно предпочтительнее SET NAMES .

Например: SET NAMES utf8mb4 вместе с объявленным столбцом CHARACTER SET latin1 - это будет конвертировать из latin1 в utf8mb4, когда INSERTing и конвертировать назад при SELECTing .

Какой ХАРАКТЕР УСТАНАВЛИВАЕТСЯ И КОЛЛАМЕНТ?

Есть десятки наборов символов с сотнями сортировок. (Данная сортировка относится только к одному набору символов.) См. Вывод SHOW COLLATION; ,

Обычно есть только 4 CHARACTER SETs :

ascii -- basic 7-bit codes.
latin1 -- ascii, plus most characters needed for Western European languages.
utf8 -- the 1-, 2-, and 3-byte subset of utf8.  This excludes Emoji and some of Chinese.
utf8mb4 -- the full set of UTF8 characters, covering all current languages.

Все включают английские символы, которые кодируются одинаково. utf8 - подмножество utf8mb4.

Лучшая практика ...

  • Используйте utf8mb4 для любого столбца TEXT или VARCHAR котором может быть множество языков.
  • Используйте ascii (latin1 в порядке) для шестнадцатеричных строк (UUID, MD5 и т. Д.) И простых кодов (country_code, postal_code и т. Д.).

utf8mb4 не существовало до версии 5.5.3, поэтому utf8 был лучшим из доступных до этого.

Вне MySQL «UTF8» означает те же вещи, что и MySQL utf8mb4, а не utf8 MySQL.

Коллажи начинаются с имени кодировки и обычно заканчиваются на _ci для « _ci и акцентного нечувствительного» или _bin для «просто сравнивать биты.

«Последняя» версия utf8mb4 - utf8mb4_unicode_520_ci , основанная на Unicode 5.20. Если вы работаете с одним языком, вам может понадобиться, скажем, utf8mb4_polish_ci , который немного изменит буквы, основываясь на польских соглашениях.

Установка наборов символов для таблиц и полей

Вы можете установить набор символов как для каждой таблицы, так и для отдельного поля с помощью операторов CHARACTER SET и CHARSET :

CREATE TABLE Address (
    `AddressID`   INTEGER NOT NULL PRIMARY KEY,
    `Street`      VARCHAR(80) CHARACTER SET ASCII,
    `City`        VARCHAR(80),
    `Country`     VARCHAR(80) DEFAULT "United States",
    `Active`      BOOLEAN DEFAULT 1,
) Engine=InnoDB default charset=UTF8;

City и Country будут использовать UTF8 , поскольку мы устанавливаем это как набор символов по умолчанию для таблицы. Street с другой стороны, будет использовать ASCII , поскольку мы специально сказали ей сделать это.

Установка правильного набора символов сильно зависит от вашего набора данных, но также может значительно улучшить переносимость между системами, работающими с вашими данными.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow