Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
leonix Member Откуда: Сообщений: 408 |
Можно ли управлять кодировкой содержимого текстового поля? Т.е. когда создаю таблицу, могу ли я как-то влиять на кодировку? |
12 мар 15, 17:37 [17377042] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Вы можете занести в текстовое поле любое нужное вам значение. Серверу все равно, какой смысл вы вкладываете в содержимое поле. |
||
12 мар 15, 17:39 [17377059] Ответить | Цитировать Сообщить модератору |
leonix Member Откуда: Сообщений: 408 |
ок. Подскажите тогда, есть поле типа nvarchar(255). Как узнать в какой кодировке там лежит текст? |
13 мар 15, 08:58 [17378807] Ответить | Цитировать Сообщить модератору |
aleks2
Guest |
nvarchar = UNICODE. Для этого зверя понятия "кодировка" ишо не придумали. |
||
13 мар 15, 09:17 [17378885] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
В той, в которой вы его туда положили |
||
13 мар 15, 09:31 [17378957] Ответить | Цитировать Сообщить модератору |
aleks2
Guest |
С этого места подробнее! |
||||
13 мар 15, 09:42 [17379001] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
О чем ? Что клиент указал занести в поле таблицы, то там и будет |
||||
13 мар 15, 09:45 [17379021] Ответить | Цитировать Сообщить модератору |
leonix Member Откуда: Сообщений: 408 |
ОК. А если другой тип (varchar), то какая кодировка будет? |
||||
13 мар 15, 10:18 [17379181] Ответить | Цитировать Сообщить модератору |
aleks2
Guest |
Последовательность 8-битных чисел вы вольны трактовать как ЛЮБУЮ кодовую страницу. MS SQL не хранит кодовую страницу и не знает ничего об этом. |
||||
13 мар 15, 10:24 [17379200] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
ну вообще-то хранит. коллэйшены же не только но и кодовая страница тоже. в именах SQL-коллэйшенов она даже указывается (хоть и есть исключения). в моем примере я заношу абсолютно одинаковую последовательность символов их кодами, т.е. без намека на кодовую страницу, но в колонках указываю соответствующий коллэйшен. вот результат: К сообщению приложен файл. Размер - 42Kb |
||
13 мар 15, 11:05 [17379382] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
простите, картинка не та, то было для получения в бинарном виде, теперь все ок (вопросы -- это он уже перекодировал, нам это не надо) |
13 мар 15, 11:11 [17379403] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
К сообщению приложен файл. Размер - 42Kb |
13 мар 15, 11:11 [17379408] Ответить | Цитировать Сообщить модератору |
aleks2
Guest |
1. Это как-то препятствует мне указать любой другой коллэйшен? 2. Это ваш клиент отображает "хрен знает что", а сервер ему все байтики передал "как есть". |
||||
13 мар 15, 11:17 [17379428] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Сервер _не хранит_ кодовую страницу клиента Соответствие кодовой странице какому то коллейту не есть хранение этой кодовой странице в поле таблицы |
||
13 мар 15, 11:21 [17379460] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
да, препятствует. нужно хорошо извратиться, чтобы вынуть теперь кириллицу из колонки с насильно указанным латинским коллэйшеном, или покажите, как же это просто указанием коллейшена получится (см. картинку ниже)
ну, у вас клиент несомненно круче, покажите, что как он отобразит честно переданные байтики, сложенные в столбец с 1252 К сообщению приложен файл. Размер - 43Kb |
||||
13 мар 15, 11:27 [17379499] Ответить | Цитировать Сообщить модератору |
aleks2
Guest |
cast(str as varbinary). Чего тут сложного? |
||||
13 мар 15, 11:30 [17379527] Ответить | Цитировать Сообщить модератору |
aleks2
Guest |
Кстати, проблема там не с извлечением, а с запихиванием.declare @t table(a varchar(100) collate Latin1_General_CI_AS, b varchar(100) collate Cyrillic_General_CI_AS ) insert @t values('abc кириллица', 'кириллица') select *, cast(a as varbinary(100)), cast(b as varbinary(100)) from @t |
13 мар 15, 11:41 [17379594] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
действительно, да и вообще, зачем какие-то строковые поля придумали, надо сразу все в binary хранить. вот и храните. на ЖБИ тоже можно через Уралмаш доехать. где ответ на ваш же вопрос
укажите коллэйшен и получите обратно кириллицу, без перевода в binary я приветствую ваши красивые решения, когда они есть, но вот голословно прокричать и слиться/не ответить на прямой вопрос -- ваш конек. кстати, вас случайно не Васей звать? напоминаете кое-кого :) Collations and Code Pages The code page for a (var)char value determines the mapping between characters and the byte representation that is stored in the table. For example, with the Windows Latin 1 code page (1252; the SQL Server default), the character 'a' corresponds to the byte 0x61. The code page of a (var)char value is determined by the collation associated with the value. For example, the collation SQL_Latin1_General_CP1_CI_AS has the associated code page 1252. The collation of a value is either inherited from the database collation, or can be specified explicitly using the COLLATE keyword. Database collation cannot be changed if the database contains memory-optimized tables or natively compiled stored procedures. The following example sets the database collation and creates a table, which has a column with a different collation. The database uses Latin case-insensitive collation. |
||||
13 мар 15, 11:41 [17379601] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
ну так передавайте в бинарном виде, сами же писали. вы картинки не видите? надо в браузере включить, у меня то на второй картинке есть. а не складывается напрямую как раз потому, что он перекодирует в 1252, "пропуская" через юникод. как раз по причине того, что кодовая страница в коллэйшене не просто бантик. вы утверждали, что без проблем простым указанием коллэйшена ситуацию поправите. где подтверждение? строковые данные завязаны на коллэйшен, если они не в юникоде, binary отвязано, но вопрос ТС не про binary |
||
13 мар 15, 11:48 [17379654] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
А что сервер уже отвечает за отображение ? Вы занесли данные в таблицу в бинарном виде, а отбражения требуете в символьном.
получить где ? в гриде клиентского приложения ?
is determined == stored in table ? |
||||||
13 мар 15, 11:53 [17379706] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
вы тему с самого начала читаете, уверены? я символьные данные в строковых полях храню, и заношу в строковом же виде. про binary -- не ко мне, к , пожалуйста. у меня первая картинка как раз автоматом получилась, я-то юникодом занесу и кириллицу тоже, но только вот в столбец с латинским коллэйшеном она не ляжет, только вопросики, а мне надо было убедить алекса, что даже если и удастся занести кириллицу без потерь в неюникодную 1252-колонку, то обратно все равно кириллицу только с плясками получите. некрасиво из контекста выдирать. а еще хочу спросить алекса, как же быть с индексами. как искать кириллицу в неюникодной 1252-колонке. тоже в binary переводить, да? |
||||
13 мар 15, 12:11 [17379836] Ответить | Цитировать Сообщить модератору |
aleks2
Guest |
Гм? Разве тут было про поиск и прочия? |
||
13 мар 15, 12:16 [17379873] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Я - читаю
17379408 - т.е. это не вы ?
Она - ляжет. Просто клиент передаст серверу не то, что вы напечатали в окне запроса. И сервер положит в таблицу то, что получит. И вернет вам то, что там лежит. |
||||||
13 мар 15, 12:17 [17379881] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
то ж блин еще один стрелочник-подменятель исходных формулировок. ну давайте восстановим ход событий. алекс2 утверждает
вот на это его "не знает ничего" и был мой ответ:
знает о кодовой странице ровно то, что ему сообщили. и считает, что там лежат символы этой кодовой страницы. вот потому при вставке неюникода он перекодирует и получает вопросики, т.е. берет он символы, считая, что они из кодовой страницы, к-ая заложена в коллэйшене базы, в контексте к-ой выполнялся код, заносящий символы. ищет точку входа юникода и уже по ней ищет код символа в странице, к-ая заложена в коллэйшене столбца, куда вставляем. и информацию о кодовой странице знает и хранит в метаданных столбца |
||||||||
13 мар 15, 12:20 [17379900] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
если вопросики, это "она", т.е. кириллица, то извините, с вами спорить больше не о чем |
||
13 мар 15, 12:22 [17379909] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |