MySQL
Наборы символов и сортировки
Поиск…
декларация
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
, поскольку мы специально сказали ей сделать это.
Установка правильного набора символов сильно зависит от вашего набора данных, но также может значительно улучшить переносимость между системами, работающими с вашими данными.