【问题标题】:SQL query collation troubleSQL查询排序问题
【发布时间】:2014-02-03 21:23:59
【问题描述】:

我有一个类似于

的选择查询
SELECT
  itemCode,
  itemDefinition,
  clientCode,
  clientDefinition
FROM
  Invoices 

数据库中的发票表有排序规则SQL_Latin1_General_CP1_CI_AS

问题是当我在程序中接收数据时,itemDefinitionclientDefinition 列中的土耳其字符似乎不正确。例如土耳其字母 Ğ 变成其他字符,Ş 变成其他字符等。

谁能帮我解决这个问题?

谢谢

【问题讨论】:

  • 你用的DataTypes是什么Table,你能提供你的表架构吗?
  • varchar(100) ... 用于列 itemDefinition 和 clientDefinition
  • 使用 nvarchar(100),它会工作..
  • 我不能,因为数据库属于一个 ERP 程序,我无权更改它...其他解决方案?
  • SQL_Latin1_General_CP1_CI_AS 是代码页 1252 en.wikipedia.org/wiki/Windows-1252 Ğ 不在该代码页中

标签: sql-server tsql collation


【解决方案1】:

解决方案是这样的:首先,需要创建如下的字符转换函数:

CREATE FUNCTION [dbo].[ChangetoTRK](@A NVARCHAR(4000))    
RETURNS NVARCHAR(4000)      
AS    
BEGIN   
  DECLARE @TMP NVARCHAR(4000)     
  SET @TMP = REPLACE(@A COLLATE LATIN1_GENERAL_BIN, CHAR(208), N'Ğ')
  SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(220), N'Ü')
  SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(222), N'Ş')
  SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(221), N'İ')
  SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(214), N'Ö')
  SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(199), N'Ç')
  SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(73), N'I')
  SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(240), N'ğ')
  SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(252), N'ü')
  SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(254), N'ş')
  SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(105), N'i')
  SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(246), N'ö')
  SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(231), N'ç')
  SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(253), N'ı')
  RETURN @TMP
END

然后,我们在查询中使用它:

SELECT
  itemCode,
  dbo.ChangeToTRK(itemDefinition),
  clientCode,
  dbo.ChangeToTRK(clientDefinition)

来自 发票

【讨论】:

    猜你喜欢
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    • 2010-12-20
    相关资源
    最近更新 更多