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