SQLCMD 命令无法插入重音符号

Osk*_*tar 21 sql-server sqlcmd sql-server-2012 encoding

我正在尝试运行sqlcmd.exe以便从命令行设置新数据库。我在 Windows 7 64 位上使用 SQL SERVER Express 2012。

这是我使用的命令:

SQLCMD -S .\MSSQLSERVER08 -V 17 -E -i %~dp0\aqualogyDB.sql -o %~dp0\databaseCreationLog.log 
Run Code Online (Sandbox Code Playgroud)

这是一段 sql 文件创建脚本:

    CREATE DATABASE aqualogy 
    COLLATE Modern_Spanish_CI_AS
    WITH TRUSTWORTHY ON, DB_CHAINING ON;
    GO
    use aqualogy
    GO
    CREATE TABLE [dbo].[BaseLayers] (
    [Code] nchar(100) NOT NULL ,
    [Geometry] nvarchar(MAX) NOT NULL ,
    [IsActive] bit NOT NULL DEFAULT ((1)) 
    )

    EXEC sp_updateextendedproperty @name = N'MS_Description', @value = N'Capas de     cartografía base de la aplicaicón. Consideramos en Galia Móvil la cartografía(...)'
, @level0type = 'SCHEMA', @level0name = N'dbo'
, @level1type = 'TABLE', @level1name = N'BaseLayers'
Run Code Online (Sandbox Code Playgroud)

好吧,请检查单词上是否有一些重音;这是表的描述。创建数据库没有任何问题。正如您在附加的屏幕截图中看到的那样,脚本可以理解“整理”。尽管如此,在检查表格时没有正确显示口音。整理问题

我真的很感激任何帮助。非常感谢。

[编辑]:大家好。使用 Notepad++ 更改 SQL 文件编码工作正常!非常感谢您的帮助:我从这个问题中学到了一些有趣的东西!

在此处输入图片说明

swa*_*eck 42

另一种选择,其中一个我刚刚得知,来自sqlcmd文档。您需要设置代码页sqlcmd以匹配文件编码的代码页。对于 UTF-8,代码页为 65001,因此您需要:

SQLCMD -S .\MSSQLSERVER08 -V 17 -E -i %~dp0\aqualogyDB.sql -o %~dp0\databaseCreationLog.log -f 65001


Mar*_*ian 10

从评论来看,问题不完全在于表或 SQLCMD 导入特殊字符的方式。通常,有问题的导入与脚本本身的格式有关。

Management Studio 本身提供了使用特定编码保存的选项,这应该会在未来解决问题。第一次保存文件(或使用另存为)时,您应该单击“保存”按钮附近的小箭头,以使用选项Save with encoding

在此处输入图片说明

默认情况下,它将文件保存在西欧 (1252) 中。每当我有任何特殊字符时,我都会使用 UTF8(尽管可能适合其他一些限制性编码),因为它通常是最快的解决方法。

在此处输入图片说明

我不确定(从图片中)您使用的是 SSMS,所以请确保您自己的编辑器可以选择以不同的编码保存文件。如果没有,通常可以在智能编辑器中转换文件(就像您已经在 Notepad++ 中尝试过的那样)。尽管如果您从宽编码转换为窄编码,然后再转换回宽编码(例如:从 Unicode 到 ANSI 再转换回 Unicode),这可能不起作用。

  • 这个答案似乎不正确。我用 Notepad++ 以 UTF-8 格式保存了文件。SQLCMD.exe 不能正确传输字符。如果我将内容复制到 SSMS,它就可以正常工作。真正的解决方案是 swasheck 提供的添加参数 -f 65001 的答案。 (2认同)