Какая-то несовместимость существует между различными utf8 / 16/32_spanish_ci?

Я нахожусь несмотря на то, что создаю базу данных, но нахожусь перед сомнением, что ты дифференцируешь их, но я не знаю, касается ли он баз данных.

Я всегда использую utf8_spanish_ci чтобы создавать базу данных относительно collate той же самой. Но я обратил внимание, что существует так utf16_general_ci, как utf32_general_ci.

А следовательно я исследовал и знаю:

  • utf8 они один байт
  • utf16 - от двух до четыре год байт
  • utf32 они decuatro установленные.

Шрифт

Но мое сомнение не размер, оно: Ввод данных коснулся бы той же самой? Я отношусь, он произведет проблемы с текстом, и т.д....

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

3
задан 23.05.2017, 15:39
1 ответ

Когда ты выбираешь collate как utf8_spanish_ci, в действительности ты определяешь 2 вещи:

  • charset: utf-8
  • collate: spanish_ci

charset определяет, как представлять данные внутри (байт), в то время как collate определяет правила, которые продолжаются, чтобы сравнивать и упорядочивать текст.

Снабди ссылками: Character Sets and Collations in MySQL.

Charset

Так что для той же цепи (например 'abc'), стоимость и количество байт, использованных, чтобы представлять эту цепь, внутри не будут теми же самыми, если ты используешь utf8_general_ci или utf16_general_ci, потому что они используют 2 charsets различные.

Есть 2 главные причины, из-за которой escojerías charset скорее, которые другой в различных обстоятельствах:

  • В случае каких-то charsets, возможно, что у него нет способности представлять некие характеры, так что важно выбирать charset, который мог бы манипулировать всеми характерами, в которых ты нуждаешься. Если ты используешь charset, который начинается из-за utf (utf8, utf16, utf32, и т.д.), ты можешь быть тогда уверен, что ты можешь манипулировать любым символом, который составляет часть Unicode.
  • Количество байт, использованный символом меняется между различными charsets. Так что, если ты хочешь проконтролировать рост базы данных, это что-то, о чем думании.

Обычно, использование utf-8 ему способствовали, потому что он уравновешивает очень хорошо необходимость манипулировать всеми характерами в Unicode, но одновременно используя формат, который уменьшает количество байт, которое требуется.

Для языков как испанец, utf-8 смоги представлять характеры с единственным байт. Но если бы он тебе коснулся манипулировать китайским языком, например, тогда возможно, что требуют большего количества байт, и тогда смоги, что utf16 будьте выгоднее. (Он замечает: противоположный, в которое pusistes в вопросе, utf8 он не представляет все характеры в Unicode с единственным байт. Какие-то да, другие не.)

Collate

Итак, внутри charset, у тебя есть выбор выбрать различные collates. Например, ты можешь выбирать между utf8_general_ci и utf8_spanish_ci, и даже также utf8_spanish2_ci. Во всех этих случаях, внутреннее представление текста идентичен (байт равны).

Скорее, эффект выбирания различного collate состоит в том, что налаживает способ, как текст сравнивается и упорядочен в твоих консультациях.

Например, если текст содержит буквы как ñ или двойная L ll, используя различные collates ты будешь ощущаться, что текст рукоположен в отличие, когда ты делаешь один ORDER BY.

Здесь я оставляю тебе демонстрацию тот, как collate затрагивает порядок текста в MySQL.

Относительно эффекта, который у него есть в сравнении данных (where col = 'abc'), я не в курсе никакого различия между utf8_general_ci и utf8_spanish_ci. Но возможно, что есть. Я знаю, что есть различия в случае других языков как немецкий язык, например.

Снабди ссылками: Examples of the Effect of Collation.

3
ответ дан 24.11.2019, 12:40