2012-01-13 3 views
4

Я собираюсь хранить истории в полях nvarchar (MAX) на SQL Server, но я знаю, что истории будут намного длиннее, чем позволяет MAX, и какой подход я должен принять? Должен ли я разделить историю на несколько строк или мне нужно пропустить использование базы данных и использовать текстовые файлы?Сохранение истории в SQL Server 2008?

+6

Я искренне сомневаюсь, что истории длиннее, чем позволяет 'nvarchar (max)'. Это 1 миллиард символов. У войны и мира всего 560 000 слов. –

+0

Cue Dr. Evil шутит здесь. –

+0

@MartinSmith, я немного смущен, я думал, что max допускает только 8000 символов. – Xaisoft

ответ

7

Я считаю, что путаница проистекает из непонимания терминов здесь.

nvarchar(n) - это тип данных, в которых n может быть номером 1-4000. Число n в этом случае имеет максимум 4000, что составляет до 8000 байт (2 байта на символ).

nvarchar(MAX) другой тип данных в целом - ключевое слово MAX является буквальным, и это не синоним для любого потенциального значения n в моем примере выше. Поля этого типа имеют максимальную длину 2^31-1 символов или более 1 миллиарда, что составляет более 2 миллиардов байт (2 байта на символ).

Те же принципы применимы к varchar(n) и varchar(MAX), за исключением каждого символа может быть только 1 байт, и в этом случае количество символов, которые могут быть сохранены в два раза. Является ли это всего 1 байт, зависит от сортировки, так как Martin Smith отмечает в комментарии!

+1

Благодарим вас за понимание моего замешательства. – Xaisoft

+1

+1 хорошее резюме – RedFilter

+0

@Xaisoft Вы очень желанны. Было странно, что они выбрали эту схему именования для этого типа данных, поскольку она функционально больше связана с устаревшим «NTEXT», чем с «nvarchar (n)». И использование ключевого слова 'MAX', по-видимому, приведет к тому, что люди верят, что« MAX »означает синоним * просто используйте максимальное числовое значение здесь * –

2

Я бы предположил, что посмотрю на document oriented databases для чего-то подобного.

+1

-1. Всегда приятно переключать технологии jsut, потому что вы даже не знаете, что может сделать ваш текущий. Я не сомневаюсь, что это хорошо или плохо, но плакат просто спрашивает, потому что он имеет дезинформацию и считает, что технический предел - 8000 символов (чего никогда не было). – TomTom

+0

Это хорошо и хорошо (и я большой сторонник NoSQL), но если он уже находится на SQL Server, то, вероятно, путь varchar (max) - это, по мнению других,. –

+0

@TomTom Этот ответ не заслуживает -1. ОП поставил свою проблему, Муз предложил одно возможное решение. Это не плохое решение (особенно учитывая, что оно было опубликовано до того, как стало очевидно, что ОП был дезинформирован). Не используйте его только потому, что это не решение, которое вы бы выбрали. – ean5533

4

Хранить их в главах.

Это не технический - это почти невозможно иметь Astory 1 млрд NVARCHAR символов (и NVARCHAR (макс) является «новый» тип TEXT данные

но загрузка и обработка их будет болезненные.. ..

хранить их в качестве глав и сохранить начало/конец номер страницы для каждой главы, когда это имеет смысл, так что вы можете перемещаться немного легче

Btw, вы вывесили вы думали, что 800 символов - это было НИКОГДА не делайте этого случая. Предел будет 8000 байт - если он будет применяться - и это будет 4000 символов unicode.

+0

+1, потому что это может быть отличным дополнительным советом для этого использования, если рассказы представляют собой рассказы с несколькими разделами. –

+0

Если они не будут, они не будут ВЕЧНО большими в любом случае;) – TomTom

+1

Связанная с Тангентом информация: Согласно [wikipedia] (http://en.wikipedia.org/wiki/List_of_longest_novels), самый длинный, однотомный роман, написанный на английском языке является «Плохой член моей страны», на 850 000 слов. И согласно [этому документу] (http://www.puchu.net/doc/Average_Word_Length), средняя длина слова на английском языке составляет 5,10 –

-3

Хорошо, вы могли бы попробовать сохранить как LONGTEXT (Mysql) или TEXT (MSSQL) (если вы хотите хранить объекты, я думаю, вы можете использовать BLOB) тип данных?

+0

Это был помечен 'sql-server', поэтому' LONGTEXT' не применяется. 'TEXT' устарел с SQL 2005.' nvarchar (MAX) '- правильный тип данных для использования. –

+0

Хотя я никогда не использую BLOB ...Если я храню изображения, я храню их на сервере и ссылаюсь на них в БД, так как это экономит пространство в БД. –

+0

-1. Текст обесценивается, и nvarcahr (max) теперь должен использоваться. Фактически, текст является псевдонимом этого. – TomTom

Смежные вопросы