Для SQL, если я просто использую таблицы для хранения латинских (или, точнее, просто английских) строк с учетом регистра, то будет ли разница между utf8_bin и latin1_general_cs?
Кодировка английских символов одинакова для latin1
и utf8
(и большинства других CHARACTER SETs
поддерживаемых MySQL). Таким образом, английский текст работает одинаково между кодировками.
Оба COLLATIONs
будут работать одинаково. Например, A
! = В любом случае. a
Вернемся к вопросу...
CHARACTER SET
) отличается. И порядок букв с акцентом отличается.latin1
, но вы можете хранить большинство из них в utf8
.latin1_bin
также дает вам чувствительность к регистру. Для английского языка он будет неотличим от latin1_general_cs
. Мир MySQL движется к utf8mb4
.
Если символы, которые вы хотите сохранить, представляются латиницей-1, то не будет иметь значения, за какие символы вы можете хранить. То, о чем вы особенно говорите, - это сортировки. При использовании сопоставления latin1_general_cs
это означает, что кодировка для столбца - latin1
. Точно так же в collation utf8_bin
подразумевается кодировка utf8
.
Прежде всего, вы должны выбрать кодировку, которую хотите использовать, и для каждой кодировки вы можете выбрать несколько комбинаций. Сопоставление влияет на сортировку и сравнение записей. _bin
сопоставления сравнивают исходное двоичное представление вашего текста, т.е. равны только 100% -ные значения. Другие сопоставления, такие как _general_cs
применяют правила сортировки и сравнения с _general_cs
языка (например, german
сортировки сортируют и сравнивают "ß" как близко к "s"), а _cs
означает регистр, чувствительный к регистру. _ci
было бы регистрозависимым, что означает, что "foo" и "Foo" сравниваются как равные.
Итак, возьмите свой выбор в зависимости от того, как вы собираетесь использовать столбец.
CHARACTER SET
подразумевает кодирование. ß
кодируется в шестнадцатеричном C39F
DF
(1 байт) в C39F
1 и C39F
(2 байта) в utf8.