Кодировка по умолчанию в среде SQL Server Management Studio

У меня недавно был SSMS 2008 переустановлен на моем ноутбуке

когда я нажимаю " новый запрос..", Теперь мне предлагается выбрать кодировку для файла, что меня никогда не просили делать раньше

Я связал sql againt "редактор запросов SQL с кодировкой" в разделе текстового редактора опции и перезапустил SSMS

Что я могу сделать, чтобы связать с кодировкой, поскольку я не хочу выбирать каждый раз, когда я делаю новый запрос или открываю существующий sql файл

5 ответов


на решение опубликовано Fakher Халим на Microsoft Connect.

У меня была та же проблема. Git не покажет никаких различий в истории (кроме " двоичных файлов a / x.sql и b / x.sql отличаются). Поэтому я нажал Tools=>Options= > Environments=>Международные Настройки. Изменил Язык от " English "до"Same as Microsoft Windows". Теперь GIT DIFF работает отлично - сообщает разницу в версии нормально!


на основе авизо в другом месте (https://connect.microsoft.com/SQLServer/feedback/details/288677/unicode-defaults-on-ssms-save) я изрубил в "команду", чтобы попытаться "изменить кодировку по умолчанию" в UTF-8 с BOM. Скрипт работает путем записи шаблона UTF-8 w / BOM в файл SQLFile.файл sql в дереве программных файлов SQL Server. Он работал один раз на моей машине, но это не означает, что он без ошибок или 100% безопасен. ИСПОЛЬЗУЙТЕ НА СВОЙ Риск!

в соответствии с ответом "Microsoft" в этом потоке:

по умолчанию способ сохранения файлов определяется способом основного файла шаблона SQLFile.SQL находится в C:\Program файлы\Майкрософт SQL сервер\90\сервис\Бинн\VSShell\Common7\язь\sqlworkbenchprojectitems\SQL-кода. Если вы сохраните этот файл с помощью кодировки ANSI, то последующие новые сеансы запросов будут использовать эту кодировку.

обратите внимание, что на моей машине я нашел шаблон в другой путь, поэтому я написал сценарий, чтобы найти любой С указанным именем либо файлов программы. Это кажется достаточно глупым именем, что ложные столкновения должны быть редкими.

если не передано никаких аргументов (или любых аргументов, отличных от ожидаемых), он должен выполнить сухой запуск. Не забудьте сначала запустить его без прав администратора. Он, по крайней мере, найдет любые применимые файлы, и вы можете решить, хотите ли вы продолжить сценарий или изменить файлы себе.

чтобы запустить скрипт по-настоящему, передайте первый аргумент "force". Это опасная часть. Будьте осторожны. Чтобы запустить скрипт до завершения без паузы для ввода пользователем, передайте второй аргумент "dontpause" (это можно передать с пустым первым аргументом, чтобы пропустить паузу во время сухого запуска).

Я выбираю UTF-8, потому что он совместим с 7-битным ASCII, он поддерживает подавляющее большинство языков и символов, которые вы когда-либо захотите написать, он хранит западные текст и исходный код очень эффективно,и это управление версиями/текстовый патч. Шаблон в нижней части скрипта содержит метку порядка байтов (BOM), чтобы сигнализировать редакторам, что это не ISO-8859-1 или какая-либо другая несовместимая 8-битная кодировка по умолчанию. Убедитесь, что он не потерян при копировании/вставке. Сохраните фактический пакетный скрипт как 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 Files\SQLFile.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;

предыдущие ответы предлагали использовать Tools→Options→Environments→International Settings, но эта опция отсутствует в SSMS 17.2.

вместо этого вы можете перейти в Файл→Сохранить как..., нажмите стрелку на кнопку " Сохранить "и выберите"Сохранить с кодировкой".


Я такой идиот-я изменил ассоциацию на "Редактор SQL-запросов", и теперь все работает нормально

бит "с кодировкой" действительно должен был предупредить меня!


в SQL Server Management Studio выберите Сервис / Параметры, затем разверните " текстовый редактор "и добавьте расширение" sql "и сопоставьте его с"редактором запросов SQL".

решение работает, если вы работаете с символами ASCII. Если sql содержит символы, требующие явной кодировки (как определено редактором SQL), необходимо выбрать кодировку. Проблема возникает при создании файлов как в Редакторе SQL, так и в другом редакторе (NotePad++), а затем редактирование этих файлов в другом редакторе. NotePad++ сохраняет файлы без заголовка и может угадать кодировку. Редактор SQL, с другой стороны, всегда требует заголовка кодировки после использования определенных символов.