Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 SQLCMD -f codepage (как пишется codepage: CP1251 или 1251 и т.д.) ?  [new]
AlexanP
Member

Откуда:
Сообщений: 165
1)SQLCMD -f codepage (как пишется CP1251 или 1251 и т.д.) ?
Что-то в документации не нашел точное описание.

2)как можно узнать текущую codepage (на всей базе единая) ?
Collation=Cyrillic_General_CI_AS - вот это что CP1251 или 1251 или еще как ?
23 апр 12, 17:09    [12458438]     Ответить | Цитировать Сообщить модератору
 Re: SQLCMD -f codepage (как пишется codepage: CP1251 или 1251 и т.д.) ?  [new]
AlexanP
Member

Откуда:
Сообщений: 165
Нашел codepage в разделе про SQL_collation_name, но не увидел там CP866. А что вместо нее ?

Codepage
Specifies a one- to four-digit number that identifies the code page used by the collation. CP1 specifies code page 1252, for all other code pages the complete code page number is specified. For example, CP1251 specifies code page 1251 and CP850 specifies code page 850.
23 апр 12, 17:24    [12458573]     Ответить | Цитировать Сообщить модератору
 Re: SQLCMD -f codepage (как пишется codepage: CP1251 или 1251 и т.д.) ?  [new]
Glory
Member

Откуда:
Сообщений: 104751
1) BOL sqlcmd Utility

The codepage number is a numeric value that specifies an installed Windows code page


2)
SELECT *, COLLATIONPROPERTY(name, 'CodePage')
FROM ::fn_helpcollations()
23 апр 12, 17:45    [12458690]     Ответить | Цитировать Сообщить модератору
 Re: SQLCMD -f codepage (как пишется codepage: CP1251 или 1251 и т.д.) ?  [new]
AlexanP
Member

Откуда:
Сообщений: 165
SELECT *, COLLATIONPROPERTY(name, 'CodePage') FROM ::fn_helpcollations()

Странно, этот select не возвращает 866, а если пользоваться утилитой SQLCMD c ключом -f866, то нормально такая 866 воспринимается. Можно даже так написать:
sqlcmd.exe -Uuser -P -Sser -fi:866,o:1251 -iFile.866 -w1000 -oFile.1251

Поэтому непонятно, почему запрос
SELECT *, COLLATIONPROPERTY(name, 'CodePage') FROM ::fn_helpcollations()
не возвращает 866 ....
25 апр 12, 10:38    [12467369]     Ответить | Цитировать Сообщить модератору
 Re: SQLCMD -f codepage (как пишется codepage: CP1251 или 1251 и т.д.) ?  [new]
Glory
Member

Откуда:
Сообщений: 104751
AlexanP
Поэтому непонятно, почему запрос
SELECT *, COLLATIONPROPERTY(name, 'CodePage') FROM ::fn_helpcollations()
не возвращает 866 ....

Потому что нет коллейтов с такой страницей
25 апр 12, 10:41    [12467388]     Ответить | Цитировать Сообщить модератору
 Re: SQLCMD -f codepage (как пишется codepage: CP1251 или 1251 и т.д.) ?  [new]
AlexanP
Member

Откуда:
Сообщений: 165
Наверное я не так понял. Запрос
SELECT *, COLLATIONPROPERTY(name, 'CodePage') FROM ::fn_helpcollations()
возвращает возможные варианты подеерживаемые SQL Server-ом, а
ключ -f<codepage> позволяет сконвертировать из указанной страницы в серверную. Так ?

Тогда вопрос остается "Из каких клиентских кодовых страниц можно сконвертировать в серверную ?".
Где можно прочитать, что можно написать -f866 ?
25 апр 12, 10:50    [12467450]     Ответить | Цитировать Сообщить модератору
 Re: SQLCMD -f codepage (как пишется codepage: CP1251 или 1251 и т.д.) ?  [new]
Glory
Member

Откуда:
Сообщений: 104751
sqlcmd.exe пакетно _выполняет_ скрипты TSQL.
О какой конвертации вы говорите ?
25 апр 12, 10:54    [12467476]     Ответить | Цитировать Сообщить модератору
 Re: SQLCMD -f codepage (как пишется codepage: CP1251 или 1251 и т.д.) ?  [new]
AlexanP
Member

Откуда:
Сообщений: 165
О какой конвертации вы говорите ?

Я имею ввиду ситуацию когда выполняются SQL-команды из файла, который будет в параметре -iFile.
А в этом файле могут строки быть в кодировке не такой как на сервере.

Например содержимое файла File:
insert into TABLE (STR) select 'Строка в кодировке 866'.

Команда
SQLCMD -f866 -iFile ...

сконвертит 'Строка в кодировке 866' в строку c серверной кодировкой. Так ?
Для DB-Lib была же опция Ansi to OEM ?
25 апр 12, 15:08    [12469544]     Ответить | Цитировать Сообщить модератору
 Re: SQLCMD -f codepage (как пишется codepage: CP1251 или 1251 и т.д.) ?  [new]
Glory
Member

Откуда:
Сообщений: 104751
AlexanP
сконвертит 'Строка в кодировке 866' в строку c серверной кодировкой. Так ?
Для DB-Lib была же опция Ansi to OEM ?

Только причем ту коллейты сервера то ?
25 апр 12, 15:12    [12469593]     Ответить | Цитировать Сообщить модератору
 Re: SQLCMD -f codepage (как пишется codepage: CP1251 или 1251 и т.д.) ?  [new]
AlexanP
Member

Откуда:
Сообщений: 165
Так с самого начала я вопрос задавал как написать -fcodepage в команде SQLCMD -f codepage
Какими могут быть эти codepage ? Где написано, что можно написать -f866 ?
25 апр 12, 15:33    [12469788]     Ответить | Цитировать Сообщить модератору
 Re: SQLCMD -f codepage (как пишется codepage: CP1251 или 1251 и т.д.) ?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Цитата уже была
The codepage number is a numeric value that specifies an installed Windows code page

что непонятного ?
25 апр 12, 15:35    [12469813]     Ответить | Цитировать Сообщить модератору
 Re: SQLCMD -f codepage (как пишется codepage: CP1251 или 1251 и т.д.) ?  [new]
AlexanP
Member

Откуда:
Сообщений: 165
installed Windows code page

А разве 866 это "Windows code page" ? Я думал это DOS codepage.
25 апр 12, 16:28    [12470235]     Ответить | Цитировать Сообщить модератору
 Re: SQLCMD -f codepage (как пишется codepage: CP1251 или 1251 и т.д.) ?  [new]
Glory
Member

Откуда:
Сообщений: 104751
AlexanP
А разве 866 это "Windows code page" ? Я думал это DOS codepage.

Ну так в этой цитате сказано
- как задавать страницу
- какие разрешены значения страниц
25 апр 12, 16:31    [12470252]     Ответить | Цитировать Сообщить модератору
 Re: SQLCMD -f codepage (как пишется codepage: CP1251 или 1251 и т.д.) ?  [new]
AlexanP
Member

Откуда:
Сообщений: 165
- какие разрешены значения страниц

Вот и получается, что раз 866 это не "Windows code page", значит нельзя ставить в ключе -f866.
Но реально я попробовал и вроде на -i866 не ругается, правильно конвертит строку.

Может 866 - это все-таки "Windows code page" ?

Например если написать -f111 ответ будет таким:
sqlcmd: The code page <111> specified in option -f is invalid or not installed on this system
25 апр 12, 17:09    [12470549]     Ответить | Цитировать Сообщить модератору
 Re: SQLCMD -f codepage (как пишется codepage: CP1251 или 1251 и т.д.) ?  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
AlexanP
Может 866 - это все-таки "Windows code page" ?


866 - это OEM страница которая саппортится Windows. Иными словами это Windows-OEM страница.

Возможно, для общего развития, вам будет не бесполезна статья. Там не прямо про кодовые страницы в SQL, но и про них тоже.
25 апр 12, 18:12    [12470940]     Ответить | Цитировать Сообщить модератору
 Re: SQLCMD -f codepage (как пишется codepage: CP1251 или 1251 и т.д.) ?  [new]
AlexanP
Member

Откуда:
Сообщений: 165
Если для утилиты SQLCMD.EXE есть ключ -f и можно написать -f866, то как работает утилита OSQL.EXE со страницей 866 ?
Вроде ключа нет никакого...
5 май 12, 12:39    [12512927]     Ответить | Цитировать Сообщить модератору
 Re: SQLCMD -f codepage (как пишется codepage: CP1251 или 1251 и т.д.) ?  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
AlexanP
то как работает утилита OSQL.EXE со страницей 866


А КАК она с нею работает? Приведите пример, скриншот или типа...
5 май 12, 14:56    [12513942]     Ответить | Цитировать Сообщить модератору
 Re: SQLCMD -f codepage (как пишется codepage: CP1251 или 1251 и т.д.) ?  [new]
AlexanP
Member

Откуда:
Сообщений: 165
На сервере стоит collation Cyrillic_General_CI_AS.
Если файл File.866 (866 страница) содержит insert со строками типа 'ЙЦУКЕнгшщз', то на сервере все нормально будет ?
Произойдет конвертация ? Здесь нет же ключа типа -f866 как для SQLCMD.EXE ...

OSQL -iFile.866
5 май 12, 15:29    [12514177]     Ответить | Цитировать Сообщить модератору
 Re: SQLCMD -f codepage (как пишется codepage: CP1251 или 1251 и т.д.) ?  [new]
AlexanP
Member

Откуда:
Сообщений: 165
Сейчас я вижу, что если сделаю select после insert, то кракозябр нет.
Но нет уверенности, что так будет всегда !!!
5 май 12, 15:31    [12514206]     Ответить | Цитировать Сообщить модератору
 Re: SQLCMD -f codepage (как пишется codepage: CP1251 или 1251 и т.д.) ?  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
AlexanP,

Сильно сомневаюсь в успехе. Откуда ж без соотв. флага OSQL узнает что входной файл кодирован в Кирилике, а не в Арабике, Туркиш и иже с ними? Я-то думал что вы уже провели эксперимент и убедились что все работает, а теперь законно этому удивляетесь, а вы-то и сами не знаете... :) Подозреваю, что OSQL считает что все файлы кодированы в Latin I, как это и было положено во времена этой утили.
5 май 12, 15:39    [12514269]     Ответить | Цитировать Сообщить модератору
 Re: SQLCMD -f codepage (как пишется codepage: CP1251 или 1251 и т.д.) ?  [new]
AlexanP
Member

Откуда:
Сообщений: 165
А может ODBC конвертит 866 в серверную кодировку ?
Почему я вижу в селекте нормальные русские буквы ?
Или все-таки не пользоваться этой утилитой, а пользоваться только SQLCMD c ключом -f866 ?

OSQL.EXE (BookOnline)

The osql utility allows you to enter Transact-SQL statements, system procedures, and script files. This utility uses ODBC to communicate with the server
-----------------------------
ODBC
Data Source Wizard

Perform translation for character data check box
When selected, the SQL Server ODBC driver converts ANSI strings sent between the client computer and SQL Server by using Unicode. The SQL Server ODBC driver sometimes converts between the SQL Server code page and Unicode on the client computer. This requires that the code page used by SQL Server be one of the code pages available on the client computer.

When cleared, no translation of extended characters in ANSI character strings is done when they are sent between the client application and the server. If the client computer is using an ANSI code page (ACP) different from the SQL Server code page, extended characters in ANSI character strings may be misinterpreted. If the client computer is using the same code page for its ACP that SQL Server is using, the extended characters are interpreted correctly.
5 май 12, 16:09    [12514527]     Ответить | Цитировать Сообщить модератору
 Re: SQLCMD -f codepage (как пишется codepage: CP1251 или 1251 и т.д.) ?  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
AlexanP
А может ODBC конвертит 866 в серверную кодировку ?


Для этого ему, очевидно, совершенно необходимо знать 2 вещи:
1 - кодировку сервера (целевую)
2 - кодировку файла (исходную)

Вопрос: как БЕЗ нашей помощи (флагов) возможно реализовать (извлечь информацию) п.2? Ну хотя б на уровне идей? КАК?
5 май 12, 19:09    [12515226]     Ответить | Цитировать Сообщить модератору
 Re: SQLCMD -f codepage (как пишется codepage: CP1251 или 1251 и т.д.) ?  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
AlexanP
Почему я вижу в селекте нормальные русские буквы ?


О, вот этому я и сам удивляюсь... Но это возможно разьяснить только если вы предоставите ваше окружение: исходный файл, сервер с настройками, команды и т.д. Думаю что на самом деле что-то не так как вы думаете/пишете.

AlexanP
Или все-таки не пользоваться этой утилитой, а пользоваться только SQLCMD c ключом -f866 ?


А это даже более главный вопрос - если можно юзать показанную утилиту, нафига ж вам ВООБЩЕ OSQL сдалась?? Ретро нынче в моде? С SQLCMD мой вопрос из предыдущего сообщения становится излишним - все понятно откуда.
5 май 12, 19:14    [12515237]     Ответить | Цитировать Сообщить модератору
 Re: SQLCMD -f codepage (как пишется codepage: CP1251 или 1251 и т.д.) ?  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
AlexanP
the SQL Server ODBC driver converts ANSI strings sent between the client computer and SQL Server by using Unicode.


Что лишний раз доказывает необходимость "знания" ОБЕИХ кодировок - исходной и целевой. Посмотрите статью ссылку на которую я приводил вас выше, там эта трансляция "при посредничестве" Юникод подробно расписана.
5 май 12, 19:28    [12515267]     Ответить | Цитировать Сообщить модератору
 Re: SQLCMD -f codepage (как пишется codepage: CP1251 или 1251 и т.д.) ?  [new]
AlexanP
Member

Откуда:
Сообщений: 165
Интересно, но для разных версий механизм работы утилиты SQLCMD - разный !!!
Для MS2000 была osql, которая использовала ODBC.
Затем вместо придумали SQLCMD c использованием OLE DB.
А потом в 2012 опять ODBC, но уже для SQLCMD.....
Что-то Микрософт блуждает со своими инструментами...


SQL Server 2012 (http://msdn.microsoft.com/en-us/library/ms162773%28v=sql.110%29.aspx)
The sqlcmd utility lets you enter Transact-SQL statements, system procedures, and script files at the command prompt, in Query Editor in SQLCMD mode, in a Windows script file or in an operating system (Cmd.exe) job step of a SQL Server Agent job.
This utility uses ODBC to execute Transact-SQL batches.

SQL Server 2008 (http://msdn.microsoft.com/en-us/library/ms162773%28v=sql.100%29.aspx)
The sqlcmd utility lets you enter Transact-SQL statements, system procedures, and script files at the command prompt, in Query Editor in SQLCMD mode, in a Windows script file or in an operating system (Cmd.exe) job step of a SQL Server Agent job.
This utility uses OLE DB to execute Transact-SQL batches.

SQL Server 2005 (http://msdn.microsoft.com/en-us/library/ms162773%28v=sql.90%29.aspx)
The sqlcmd utility lets you enter Transact-SQL statements, system procedures, and script files at the command prompt, in Query Editor in SQLCMD mode, in a Windows script file or in an operating system (Cmd.exe) job step of a SQL Server Agent job.
This utility uses OLE DB to execute Transact-SQL batches.
5 май 12, 23:56    [12516337]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить