Sql server 使用Microsoft SQLServer和Unicode避免代码更改

Sql server 使用Microsoft SQLServer和Unicode避免代码更改,sql-server,unicode,data-migration,Sql Server,Unicode,Data Migration,如何让MSSQL服务器在默认情况下接受Unicode数据到VARCHAR或NVARCHAR列中 我知道您可以通过在字段中要放置的字符串前面放置一个N来实现这一点,但老实说,这在2008年似乎有点过时,尤其是在使用SQL Server 2005时。如果这是一个web应用程序,您可能会让您的web服务器使用UTF8作为默认编码。这样,所有往返于浏览器的数据都将是UTF8,可以插入到VARCHAR字段中。UTF8是一种让不知道Unicode的应用程序处理它的好方法。如果这是一个web应用程序,您可能会

如何让MSSQL服务器在默认情况下接受Unicode数据到VARCHAR或NVARCHAR列中


我知道您可以通过在字段中要放置的字符串前面放置一个N来实现这一点,但老实说,这在2008年似乎有点过时,尤其是在使用SQL Server 2005时。

如果这是一个web应用程序,您可能会让您的web服务器使用UTF8作为默认编码。这样,所有往返于浏览器的数据都将是UTF8,可以插入到VARCHAR字段中。UTF8是一种让不知道Unicode的应用程序处理它的好方法。

如果这是一个web应用程序,您可能会让您的web服务器使用UTF8作为默认编码。这样,所有往返于浏览器的数据都将是UTF8,可以插入到VARCHAR字段中。UTF8是一种让不知道Unicode的应用程序处理它的好方法。

N语法是在SQL Server中指定Unicode字符串文字的方式

N'Unicode string'
'ANSI string'
SQL Server将尽可能使用列的排序规则或数据库的排序规则在两者之间自动转换

因此,如果字符串文字实际上不包含unicode字符,则不需要指定N前缀

但是,如果字符串文字确实包含unicode字符,则必须使用N前缀。

N语法是在SQL Server中指定unicode字符串文字的方式

N'Unicode string'
'ANSI string'
SQL Server将尽可能使用列的排序规则或数据库的排序规则在两者之间自动转换

因此,如果字符串文字实际上不包含unicode字符,则不需要指定N前缀


但是,如果字符串文字确实包含unicode字符,则必须使用N前缀。

只要不进行字符集转换,您就可以将UTF8内容存储在MSSQL服务器的VARCHAR字段中,但应注意:

应用程序之外的任何管理/报告/数据工具都无法理解您的非英语字符

特定于语言的处理,例如对名称列表进行排序,可能不会按照每种语言都可以接受的顺序进行

必须小心数据截断。截断多字节UTF8字符通常会导致相关字符的数据损坏。如果输入超过字段长度,则应始终拒绝输入

禁用字符集转换可能不像您想象的那么容易。即使您在客户机驱动程序中禁用了字符集转换,但在某些情况下,如果使用的客户机和RDBMS代码页之间存在显著的区域设置差异,则仍然可以覆盖字符集转换,这会立即导致数据损坏

如果你认为这就是你所要担心的一切,那你就得自欺欺人了


总之,虽然你可能会想走这条路,但这不是一个好主意。当使用多字节时,需要更改代码。

虽然您可以简单地将UTF8内容存储在MSSQL服务器的VARCHAR字段中,但只要不进行字符集转换,您应该注意:

应用程序之外的任何管理/报告/数据工具都无法理解您的非英语字符

特定于语言的处理,例如对名称列表进行排序,可能不会按照每种语言都可以接受的顺序进行

必须小心数据截断。截断多字节UTF8字符通常会导致相关字符的数据损坏。如果输入超过字段长度,则应始终拒绝输入

禁用字符集转换可能不像您想象的那么容易。即使您在客户机驱动程序中禁用了字符集转换,但在某些情况下,如果使用的客户机和RDBMS代码页之间存在显著的区域设置差异,则仍然可以覆盖字符集转换,这会立即导致数据损坏

如果你认为这就是你所要担心的一切,那你就得自欺欺人了


总之,虽然你可能会想走这条路,但这不是一个好主意。使用多字节时需要更改代码。

他们确实需要一种方法来关闭对N前缀的需要。“向后兼容需要它”参数对我来说毫无意义-当然,请将该行为设置为旧应用程序的默认行为,但为我提供一个选项,在默认情况下启用Unicode字符串,即不需要N前缀。我发现在Oracle和Postgresql中这不是一个问题的时候,我需要在我的应用程序的大范围内使用Unicode来适应SQL Server上的Unicode。来吧,微软

他们真的需要一种方法来关闭对N前缀的需求。“向后兼容需要它”参数对我来说毫无意义-当然,请将该行为设置为旧应用程序的默认行为,但为我提供一个选项,在默认情况下启用Unicode字符串,即不需要N前缀。我发现在Oracle和Postgresql中这不是一个问题的时候,我需要在我的应用程序的大范围内使用Unicode来适应SQL Server上的Unicode。来吧,微软