Mysql: Когда я должен объявить столбец типа CHAR (String) для использования UTF8 или Latin1? - PullRequest
0 голосов
/ 13 июня 2019

Поскольку Mysql> = 8.0 поддерживает сортировку в UTF8MB4.

Но если столбец типа CHAR представляет собой буквенно-цифровую строку, будет ли лучше использовать пользовательские параметры сортировки в UTF8 или latin1?


Я использую Flask-Sqlalchemy, и мой проект устанавливает SQLALCHEMY_DATABASE_URI = 'mysql+mysqldb://root:@localhost:3306/testdb?charset=utf8mb4'

Но после обновления mysql до 8.0 все таблицы создаются с сопоставлением UTF8MB4.

Например:

class Topic(db.Model, CoModel):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(168))
    content = db.Column(db.Text)

==> mysql

CREATE TABLE `topic` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(168) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `content` text COLLATE utf8mb4_general_ci ,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

Должен ли я на заказ name = db.Column(db.String(168, collation="utf8_general_ci"))


UTF8MB4 хорош в поддержке огромного количества кодировок символов.

Должен ли я настроить utf8mb4 по умолчанию и использовать его везде?

1 Ответ

0 голосов
/ 14 июня 2019

В дальнейшем вам следует использовать utf8mb4 почти для всех столбцов CHAR / VARCHAR / TEXT.

CHARACTER SET utf8mb4 охватывает практически все наборы символов мира.Если ваш клиент кодирует символы как UTF-8 (внешний эквивалент utf8mb4), тогда utf8mb4 - это хорошо.

Переход с utf8 на utf8mb4 - это хорошо.Первый является подмножеством последнего.Разница в Emoji и некоторых китайцах.

Смешивание latin1 с utf8 или utf8mb4 возможно, но этот форум полон программистов / дбасов, которые все испортили.

8.0 изменил значение по умолчанию на utf8mb4 по многим веским причинам.

Обратите внимание, что соглашение MySQL для xxxx_yyy_ci является сопоставлением , которое применяется к набору символов xxxx.То есть utf8_general_ci принадлежит utf8, , а не utf8mb4.

«Набор символов» - это кодировка.Сличение - это набор правил для сравнения строк.Пример: 'A' следует рассматривать как равное 'a'.

...