Иван 76
Новичок
Как правильно хранить различные кодировки в одной базе?
Добрый день.
Существует промышленный интернет-проект на русском языке.
Сейчас из него делается интернациональное мультиязычное приложение.
Локализация давно уже решена с помощью gettext. Есть вопрос по организации хранения данных.
В силу определенных объективных и субъективных причин (большой объем переделок, мое нежелание и пр., техническая независимость от хостера, большой объем данных в юникоде...), я не очень хочу использовать UTF-8.
А при использовании различных кодировок, я вижу два варианта хранения данных:
1. Все данные в одной таблице, при этом имеется поле lang_id - которое указывает, к какой языковой версии относится запись.
2. Разнести данные по различным таблицам, при этом талицы разных языковых версий будут иметь суффикс типа *_ru, *_de, *_en, *_fr и т.д...., например production_ru, production_de ...
При использовании второго способа, все осуществляется гораздо проще:
1. Для каждой таблицы можно легко задать кодировку и сопоставление (collation)
2. Уменьшается объем и без того больших таблиц (точнее - он не так сильно увеличится с переходом на мультиязычность). Что должно отразится на производительности.
Недостатки:
1. нужно сильно много плодить таблиц, что неудобно
2. Требуется правка огромного количества кода.
Со вторым вариантом, если все хранить в одной таблице, этих недостатков можно избежать. Править скриптов - меньше, соответственно - меньше вероятность ошибки.
Но:
1. Непомерно вырастет объем таблиц. На 150 000 прайс - строк - более 500 000 строк в таблице - это не есть гуд. Хотя, при правильном построении индекса... но все же...
2. Возникает ВОПРОС ПО КОДИРОВКАМ, ответа на который я в форуме НЕ НАШЕЛ.
Как хранить разные кодировки в одной таблице, например iso-8859-1 и cp1251?
После просмотра документации, я пришел к выводу, что кодировку таблицы и сопоставление все же можно указывать при каждом конкретном запросе.
Тем не менее, хранить такой винигрет - могут возникнуть вопросы в будущем, которые я пока не могу предвидеть.
А посему вопрос к тем, кто имеет подобный опыт:
1. Как бы поступили Вы в данной ситуации?
2. Что Вы по этому поводу думаете?
Заранее спасибо.
Добрый день.
Существует промышленный интернет-проект на русском языке.
Сейчас из него делается интернациональное мультиязычное приложение.
Локализация давно уже решена с помощью gettext. Есть вопрос по организации хранения данных.
В силу определенных объективных и субъективных причин (большой объем переделок, мое нежелание и пр., техническая независимость от хостера, большой объем данных в юникоде...), я не очень хочу использовать UTF-8.
А при использовании различных кодировок, я вижу два варианта хранения данных:
1. Все данные в одной таблице, при этом имеется поле lang_id - которое указывает, к какой языковой версии относится запись.
2. Разнести данные по различным таблицам, при этом талицы разных языковых версий будут иметь суффикс типа *_ru, *_de, *_en, *_fr и т.д...., например production_ru, production_de ...
При использовании второго способа, все осуществляется гораздо проще:
1. Для каждой таблицы можно легко задать кодировку и сопоставление (collation)
2. Уменьшается объем и без того больших таблиц (точнее - он не так сильно увеличится с переходом на мультиязычность). Что должно отразится на производительности.
Недостатки:
1. нужно сильно много плодить таблиц, что неудобно
2. Требуется правка огромного количества кода.
Со вторым вариантом, если все хранить в одной таблице, этих недостатков можно избежать. Править скриптов - меньше, соответственно - меньше вероятность ошибки.
Но:
1. Непомерно вырастет объем таблиц. На 150 000 прайс - строк - более 500 000 строк в таблице - это не есть гуд. Хотя, при правильном построении индекса... но все же...
2. Возникает ВОПРОС ПО КОДИРОВКАМ, ответа на который я в форуме НЕ НАШЕЛ.
Как хранить разные кодировки в одной таблице, например iso-8859-1 и cp1251?
После просмотра документации, я пришел к выводу, что кодировку таблицы и сопоставление все же можно указывать при каждом конкретном запросе.
Тем не менее, хранить такой винигрет - могут возникнуть вопросы в будущем, которые я пока не могу предвидеть.
А посему вопрос к тем, кто имеет подобный опыт:
1. Как бы поступили Вы в данной ситуации?
2. Что Вы по этому поводу думаете?
Заранее спасибо.