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

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Аватара пользователя
girmate
Сообщения: 1533
Зарегистрирован: 2015.10.27, 12:52

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

Сообщение girmate »

Всегда считал что для многих языков нужно создавать кодировку в MySql utf8_general_ci.

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

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

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

Аватара пользователя
girmate
Сообщения: 1533
Зарегистрирован: 2015.10.27, 12:52

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

Сообщение girmate »

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

А вы какую разновидность utf8 используете в своих мультиязычных проектах?
Осторожно! Вы общаетесь с новичком ;)

Аватара пользователя
girmate
Сообщения: 1533
Зарегистрирован: 2015.10.27, 12:52

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

Сообщение girmate »

Вот еще докопался: http://rmcreative.ru/blog/post/utf8_uni ... general_ci.

Тему можно закрывать.
Осторожно! Вы общаетесь с новичком ;)

Аватара пользователя
rugabarbo
Сообщения: 1063
Зарегистрирован: 2015.06.21, 16:21
Контактная информация:

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

Сообщение rugabarbo »

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

Аватара пользователя
samdark
Администратор
Сообщения: 9336
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

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

Сообщение samdark »

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

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

Аватара пользователя
girmate
Сообщения: 1533
Зарегистрирован: 2015.10.27, 12:52

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

Сообщение girmate »

Еще сложнее стало с выбором :)

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

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

Или же для всех таблиц поставить utf8mb4_unicode_ci и не мучатся с выбором?
Осторожно! Вы общаетесь с новичком ;)

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

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

Сообщение zelenin »

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

Аватара пользователя
girmate
Сообщения: 1533
Зарегистрирован: 2015.10.27, 12:52

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

Сообщение girmate »

И тогда ответ на предыдущий вопрос будет какой?
Осторожно! Вы общаетесь с новичком ;)

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

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

Сообщение zelenin »

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

Аватара пользователя
girmate
Сообщения: 1533
Зарегистрирован: 2015.10.27, 12:52

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

Сообщение girmate »

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

1. utf8mb4_unicode_ci;
2. utf8_unicode_ci;
3. utf8_general_ci?
Осторожно! Вы общаетесь с новичком ;)

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

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

Сообщение zelenin »

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

Аватара пользователя
girmate
Сообщения: 1533
Зарегистрирован: 2015.10.27, 12:52

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

Сообщение girmate »

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

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

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

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

Сообщение 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

Аватара пользователя
girmate
Сообщения: 1533
Зарегистрирован: 2015.10.27, 12:52

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

Сообщение girmate »

Я так и знал, что казалось бы в практически решенном вопросе "вылезет" еще какая-нибудь лабуда. И теперь живи с этим.
Осторожно! Вы общаетесь с новичком ;)

Аватара пользователя
samdark
Администратор
Сообщения: 9336
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

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

Сообщение samdark »

Эээ... а зачем нормализовывать-то? В utf8mb4 умещается всё.

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

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

Сообщение zelenin »

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

Аватара пользователя
girmate
Сообщения: 1533
Зарегистрирован: 2015.10.27, 12:52

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

Сообщение girmate »

Ну ники пользователей, если их можно только на английском писать (по умолчанию), нету же смысла хранить в utf8mb4_unicode_ci ?
Осторожно! Вы общаетесь с новичком ;)

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

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

Сообщение zelenin »

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

Аватара пользователя
girmate
Сообщения: 1533
Зарегистрирован: 2015.10.27, 12:52

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

Сообщение girmate »

Ну я так и думал. Просто Вы сделали поправку на то, что у меня "по умолчанию" не может быть проекта, который выстрелит, типа зачем тебе еще париться с кодировками - бери вон ту, самую вместительную и не заморачивайся :D.
Осторожно! Вы общаетесь с новичком ;)

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

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

Сообщение zelenin »

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

Ответить