【问题标题】:SQL Server global settings to get char field trimmed用于修剪 char 字段的 SQL Server 全局设置
【发布时间】:2020-01-15 16:54:31
【问题描述】:

默认情况下,MySQL 在从字符串中正确修剪空格后返回 char 字段。 然而,这不是 ANSII 标准所期望的行为。另一方面,SQL Server 按原样返回空格(正如标准所期望的那样)。

在 MySQL 中,要更改它,我们可以通过以下方式之一将变量 sql_mode 设置为包含 PAD_CHAR_TO_FULL_LENGTH:

仅适用于当前会话:

SET SESSION sql_mode = 'PAD_CHAR_TO_FULL_LENGTH'

或全局:

SET SESSION sql_mode = 'PAD_CHAR_TO_FULL_LENGTH'

问题是:SQL Server 是否有任何等效的设置来改变行为,因此它会正确修剪任何 char 类型的空格(尽管它不是 ANSII 标准) - 所以它的行为会像 MySQL?

【问题讨论】:

  • 看看 CHAR 与 VARCHAR。 CHAR 将有尾随空格 Select Len5 = convert(char(5),'aaa'),Len3=convert(varchar(5),'aaa')
  • 谢谢。我知道这些类型之间的区别。我在询问全局更改 SQL Server 中 char(n) 字段的检索行为,以便它模仿 My SQL 的行为。
  • 不,你不能在 sql server 中做到这一点。我会说明您无论如何都不想这样做,因为这实际上会在您检索数据时更改数据,这可能会导致一些问题。
  • 不是全局的,如提供的示例中,您必须转换

标签: mysql sql sql-server


【解决方案1】:

是的,SQL Server 确实有 sql 模式...

参考:https://docs.microsoft.com/en-us/sql/ssma/mysql/sql-modes-mysqltosql?view=sql-server-ver15

并且等价于 PAD_CHAR_TO_FULL_LENGTH 是 ANSI_PADDING 尝试

SET ANSI_PADDING { ON | OFF }

https://docs.microsoft.com/en-us/sql/t-sql/statements/set-ansi-padding-transact-sql?view=sql-server-ver15

【讨论】:

  • 这不是一回事。这不是在会话级别,而是在服务器级别。这会影响数据的存储方式,而不是检索方式。这实际上会在将尾随空格存储到数据库中之前去除尾随空格。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多