Вопрос:
Недавно я обновил SSMS 2008 на своем ноутбуке
Когда я нажимаю “Новый запрос..”, теперь мне предлагается выбрать кодировку для файла, чего я никогда не просил сделать раньше
У меня есть связанный sql againt “Редактор SQL-запросов с кодировкой” в разделе “Текстовый редактор” Option и перезапущенной SSMS
Что я могу сделать, чтобы связать с кодировкой, поскольку я не хочу выбирать каждый раз, когда я делаю новый запрос или открываю существующий файл sql
Лучший ответ:
Я такой идиот – я изменил ассоциацию на “SQL Query Editor”, и теперь все работает отлично
Бит “с кодировкой” действительно должен был отключить меня!
Ответ №1
В соответствии с обходным решением, опубликованным Fakher Halim на Microsoft Connect.
У меня была такая же проблема. Git не будет показывать никаких различий в истории (кроме “Двоичные файлы a/x.sql и b/x.sql отличаются). Поэтому я нажал Инструменты = > Параметры = > Окружения = > Международные настройки. Изменено Язык от” Английский “до” То же, что и Microsoft Windows”. Теперь Git DIFF работает отлично – сообщает разницу версий нормально!
Ответ №2
Исходя из рекомендаций, приведенных в другом месте (https://connect.microsoft.com/SQLServer/feedback/details/288677/unicode-defaults-on-ssms-save) Я взломал “команду script”, чтобы попытаться “изменить” кодировка по умолчанию “в UTF-8 с спецификацией. script работает, написав шаблон UTF-8 w/BOM в файле SQLFile.sql в дереве программных файлов SQL Server. Он работал один раз на моей машине, но это не значит, что он без ошибок или на 100% безопасен. ИСПОЛЬЗУЙТЕ НА СОБСТВЕННЫЙ РИСК!
В соответствии с ответом Microsoft в этом потоке:
Значение по умолчанию для сохранения файлов определяется тем, как файл основного шаблона SQLFile.sql находится в папке C:Program FilesMicrosoft SQL Server90ToolsBinnVSShellCommon7IDEsqlworkbenchprojectitemsSql. Если вы сохраните этот файл с использованием кодировки ANSI, последующие новые сеансы запроса будут использовать эту кодировку.
Обратите внимание, что на моей машине я нашел шаблон на другом пути, поэтому я написал script, чтобы найти любой файл, соответствующий этому имени в обоих файлах программы. Похоже, это глупое имя, что ложные столкновения должны быть редкими.
Если не передано никаких аргументов (или каких-либо аргументов, отличных от ожидаемых), тогда он должен выполнить сухую проверку. Обязательно запустите его без административных привилегий. Он, по крайней мере, найдет любые применимые файлы, и вы можете решить, хотите ли вы продолжить работу с script или сами изменить файлы.
Чтобы запустить script для реального, передайте первый аргумент “force”. Это опасная часть. Соблюдайте осторожность. Чтобы запустить script до завершения без паузы для ввода пользователя, передайте второй аргумент “dontpause” (это может быть передано с пустым первым аргументом, чтобы пропустить паузу во время сухого хода).
Я выбираю UTF-8, потому что он совместим с 7-разрядным ASCII, он поддерживает подавляющее большинство языков и символов, которые вам когда-либо нравятся script, он очень эффективно сохраняет западный текст и исходный код, текстовое исправление. Шаблон в нижней части script содержит знак байта (BOM) для обозначения редакторов, что это не ISO-8859-1 или некоторая другая несовместимая 8-битная кодировка по умолчанию. Убедитесь, что он не потерян при копировании/вставке. Сохраните фактический пакет script как ASCII (или совместимый, без спецификации!). Процессор команды дросселирует в спецификации UTF-8.
@echo off setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION || exit /b 1 if «x%1» == «xforce» ( echo Force enable. Danger Will Robinson! This means that I’m going to echo attempt to move files and write a new file to replace them. This echo is potentially destructive if there are any bugs in this script. echo In particular, if there are any unrelated files with the name echo sqlfile.sql under your Program Files directories then they’ll be echo corrupted. echo. echo This script is going to require elevated privileges to write to echo Program Files. Execute the Command Prompt application as an echo administrator to proceed ^(should be harmless to try without echo elevation first^). echo. echo I RECOMMEND YOU _DO NOT_ RUN THIS SCRIPT FROM WINDOWS EXPLORER echo BECAUSE YOU MAY HAVE A HARDER TIME READING THE OUTPUT. Start a echo Command Prompt and run it there. echo. if not «x%2» == «xdontpause» ( echo Now is a good time to Ctrl+C ^(and Y^). pause ) ) else ( echo Dry-run enabled. Pass a lone argument of «force» to go for real. 1>&2 echo Be careful running the script several times. Your template backup echo will be overwritten and lost. ) set paths=»C:Program Files (x86)SQLFile.sql» «C:Program FilesSQLFile.sql» for /f «tokens=*» %%f in (‘dir /a /b /s %paths% 2^>NUL’) do @( echo. echo Found: %%f if «x%1» == «xforce» ( echo Moving to: %%f.orig echo. echo If you ^(or anything else^) has made any changes to your template echo then you should be able to recover your template from the backup echo file above ^(not yet, once you continue^) ^(alternatively, echo recover the template from the source file now^). if not «x%2» == «xdontpause» ( pause ) move «%%f» «%%f.orig» || exit /b 1 ) echo. echo Writing a standard UTF-8 template with byte-order mark ^(BOM^). echo Feel free to open this file up afterward and manually set the echo encoding preferred. You can also replace it with your own echo template text. if not «x%2» == «xdontpause» ( pause ) set ok=0 rem Read in myself, look for the __BEGIN__ marker and write rem subsequent lines to the file. for /f «tokens=*» %%g in (%~dpf0) do @( if !ok! == 1 ( if «x%1» == «xforce» ( if «x%%g» == «x.» ( echo. echo.>>»%%f»|| exit /b 1 ) else ( echo %%g echo %%g>>»%%f»|| exit /b 1 ) ) ) else ( if «%%g» == «__BEGIN__» ( echo. echo Found marker. Starting write on next ^(non-empty^) line… 1>&2 echo. set ok=1 ) ) ) ) exit /b 0 Below is the SQL template. Lines containing only a dot (.) represent blank lines. Actual blank lines will be lost. __BEGIN__ ∩╗┐BEGIN TRANSACTION; . SET XACT_ABORT ON; . . . ROLLBACK; —COMMIT; Ответ №3
Предыдущие ответы предложили использовать Tools → Options → Environments → Международные настройки, но этот параметр отсутствует в SSMS 17.2.
Вместо этого вы можете перейти в File → Save As…, нажмите стрелку на кнопке “Сохранить” и выберите “Сохранить с кодировкой”.
Ответ №4
В SQL Server Management Studio выберите “Инструменты/Параметры”, затем разверните “Текстовый редактор” и добавьте расширение “sql” и сопоставьте его с “Редактором SQL-запросов”.
Решение работает, если вы работаете с символами ASCII. Если sql содержит символы, которым требуется явное кодирование (как определено редактором SQL), вы должны выбрать кодировку. Проблема возникает при создании файлов как в редакторе SQL, так и в другом редакторе (NotePad ++), а затем редактировании этих файлов в другом редакторе. NotePad ++ сохраняет файлы без заголовка и может угадать кодировку. Редактор SQL, с другой стороны, всегда требует заголовок кодировки, когда используются определенные символы.