Страница 1 из 3

Кодировка символов в таблицах для мультиязычного проекта

Добавлено: 2016.09.07, 06:49
girmate
Всегда считал что для многих языков нужно создавать кодировку в MySql utf8_general_ci.

Однако, скачав шаблон SamDark с примером магазина https://github.com/samdark/yii2-shop, заметил что кодировка там в таблицах https://github.com/samdark/yii2-shop utf8_unicode_ci!

Так какую кодировку необходимо ставить? Интернет говорит что там есть нюансы при сортировке. Якобы последняя работает лучше с немецким языком и другими, но медленнее.

Можете аргументировать в чью-то пользу? Я планирую приложение со многими языками - русский/английский/немецкий/итальянский/французкий/испанский/польский и так далее, если это суть важно.

Re: Кодировка символов в таблицах для мультиязычного проекта

Добавлено: 2016.09.07, 07:03
girmate
Сразу не обратил внимание, Александр указал в комментариях (прямо в миграции - предусмотрительный :D) ссылку http://stackoverflow.com/questions/7668 ... unicode-ci, где объясняется сравнение кодировок, но там все по-английски, поэтому вопрос оставлю.

А вы какую разновидность utf8 используете в своих мультиязычных проектах?

Re: Кодировка символов в таблицах для мультиязычного проекта

Добавлено: 2016.09.07, 07:32
girmate
Вот еще докопался: http://rmcreative.ru/blog/post/utf8_uni ... general_ci.

Тему можно закрывать.

Re: Кодировка символов в таблицах для мультиязычного проекта

Добавлено: 2016.09.07, 10:00
rugabarbo
girmate писал(а):Тему можно закрывать.
Если можно, то закрывайте (;

Re: Кодировка символов в таблицах для мультиязычного проекта

Добавлено: 2016.09.07, 13:03
samdark
Кодировка и collation — разные понятия. Кодировка определяет то, что мы можем хранить. collation — то, как мы сравниваем символы (то есть при =, LIKE, ORDER).

Кодировку на сегодняшний день для MySQL рекомендую utf8mb4. Collation utf8mb4_unicode_ci потому что юникод расширился несколько и в utf8 не всё влезает.

Re: Кодировка символов в таблицах для мультиязычного проекта

Добавлено: 2016.09.07, 17:17
girmate
Еще сложнее стало с выбором :)

Если у меня куча языков (включая немецкий и японский) и мне это нужно будет сравнивать и сортировать, то мне нужно выбрать utf8mb4_unicode_ci ?

Но для остальных полей (типа TEXT, например для правил сервиса или раздел "помощь"), мне можно ограничиться utf8_unicode_ci?

Или же для всех таблиц поставить utf8mb4_unicode_ci и не мучатся с выбором?

Re: Кодировка символов в таблицах для мультиязычного проекта

Добавлено: 2016.09.07, 18:11
zelenin
судя по названию, utf8_unicode_ci сделан давно и не поддерживает 4-байтные символы. После того как появилась необходимость, добавили новый коллейшн с поддержкой 4 байтов (mb4 - multibyte 4)

Re: Кодировка символов в таблицах для мультиязычного проекта

Добавлено: 2016.09.07, 18:12
girmate
И тогда ответ на предыдущий вопрос будет какой?

Re: Кодировка символов в таблицах для мультиязычного проекта

Добавлено: 2016.09.07, 18:19
zelenin
girmate писал(а):И тогда ответ на предыдущий вопрос будет какой?
я правильно понял, вопрос звучит как: какой коллейшн выбрать - без поддержки 4 байт и с поддержкой 4 байт?

Re: Кодировка символов в таблицах для мультиязычного проекта

Добавлено: 2016.09.07, 18:44
girmate
Не совсем.
Мультиязычный сайт - русский/английский/немецкий/японский. Где-то будет поиск и сортировка (адресная книга). Где-то не будет поиск и сортировка (раздел "помощь" или те же "контакты"). В каких случаях взять:

1. utf8mb4_unicode_ci;
2. utf8_unicode_ci;
3. utf8_general_ci?

Re: Кодировка символов в таблицах для мультиязычного проекта

Добавлено: 2016.09.07, 18:48
zelenin
girmate писал(а):Не совсем.
Мультиязычный сайт - русский/английский/немецкий/японский. Где-то будет поиск и сортировка (адресная книга). Где-то не будет поиск и сортировка (раздел "помощь" или те же "контакты").
какое отношение поиск и сортировка имеют к коллейшну?
girmate писал(а): 1. utf8mb4_unicode_ci;
2. utf8_unicode_ci;
3. utf8_general_ci?
я намекаю, что ответ уже есть в теме.

Re: Кодировка символов в таблицах для мультиязычного проекта

Добавлено: 2016.09.07, 18:50
girmate
Sam Dark писал(а):Кодировка и collation — разные понятия. Кодировка определяет то, что мы можем хранить. collation — то, как мы сравниваем символы (то есть при =, LIKE, ORDER).

Кодировку на сегодняшний день для MySQL рекомендую utf8mb4. Collation utf8mb4_unicode_ci потому что юникод расширился несколько и в utf8 не всё влезает.
Ну вот это я принимаю за ответ. Берем utf8mb4_unicode_ci и не волнуемся больше по этому поводу.

Re: Кодировка символов в таблицах для мультиязычного проекта

Добавлено: 2016.09.07, 18:52
zelenin
girmate писал(а):
Sam Dark писал(а):Кодировка и collation — разные понятия. Кодировка определяет то, что мы можем хранить. collation — то, как мы сравниваем символы (то есть при =, LIKE, ORDER).

Кодировку на сегодняшний день для MySQL рекомендую utf8mb4. Collation utf8mb4_unicode_ci потому что юникод расширился несколько и в utf8 не всё влезает.
Ну вот это я принимаю за ответ. Берем utf8mb4_unicode_ci и не волнуемся больше по этому поводу.
и не забываем нормализовать юникод ПЕРЕД попаданием в БД.
https://habrahabr.ru/post/45489/
https://github.com/zelenin/string/blob/ ... former.php

Re: Кодировка символов в таблицах для мультиязычного проекта

Добавлено: 2016.09.07, 19:01
girmate
Я так и знал, что казалось бы в практически решенном вопросе "вылезет" еще какая-нибудь лабуда. И теперь живи с этим.

Re: Кодировка символов в таблицах для мультиязычного проекта

Добавлено: 2016.09.08, 01:19
samdark
Эээ... а зачем нормализовывать-то? В utf8mb4 умещается всё.

Re: Кодировка символов в таблицах для мультиязычного проекта

Добавлено: 2016.09.08, 01:21
zelenin
Sam Dark писал(а):Эээ... а зачем нормализовывать-то? В utf8mb4 умещается всё.
https://habrahabr.ru/post/262679/

Re: Кодировка символов в таблицах для мультиязычного проекта

Добавлено: 2016.09.08, 03:40
girmate
Ну ники пользователей, если их можно только на английском писать (по умолчанию), нету же смысла хранить в utf8mb4_unicode_ci ?

Re: Кодировка символов в таблицах для мультиязычного проекта

Добавлено: 2016.09.08, 03:46
zelenin
girmate писал(а):Ну ники пользователей, если их можно только на английском писать (по умолчанию), нету же смысла хранить в utf8mb4_unicode_ci ?
смысла нет, но нет смысла и разбираться в этом. Просто по дефолту mb4 везде используйте

Re: Кодировка символов в таблицах для мультиязычного проекта

Добавлено: 2016.09.08, 04:08
girmate
Ну я так и думал. Просто Вы сделали поправку на то, что у меня "по умолчанию" не может быть проекта, который выстрелит, типа зачем тебе еще париться с кодировками - бери вон ту, самую вместительную и не заморачивайся :D.

Re: Кодировка символов в таблицах для мультиязычного проекта

Добавлено: 2016.09.10, 17:29
zelenin
Sam Dark писал(а):Эээ... а зачем нормализовывать-то? В utf8mb4 умещается всё.
https://meduza.io/feature/2016/09/10/on ... ez-ostatka
вот кстати яркий пример почему надо нормализовывать юникод
Скриншот для тех, у кого нормально отображается
Изображение