英文系统下安装的Sql Server2000的排序规则选择为Latin1_General_BIN,
现有1个数据库A,创建时未指定排序规则,其中有1个数据表B,其中的varchar字段创建时也未指定排序规则。
这个表B建立了视图C,其中,对Varchar字段使用了replace函数。
用bcp.exe导出数据时,在中文系统下没有问题,但是在英文系统下会报排序规则冲突。
请问会是什么原因?
1)视图如下:
CREATE VIEW vw_TZ_ForTest
AS
SELECT A.ulReserved AS 'TimeZone', B.UseXXX AS 'DaylightSave',
CAST(replace(B.StartTime,':','&') AS CHAR(8)) AS 'StartTime',
CAST(replace(B.EndTime,':','&') AS CHAR(8)) AS 'EndTime',
FROM GLOBELRESERVEDSTABLE A ,T_DaylightSavingTime B
WHERE A.ulClassIndex = 1000 AND A.ulObjectIndex =1000 AND A.ulFieldName = 1000 AND A.ulFieldValue = 1000 AND 1=1
2)导出如下:
C:\Program Files\Microsoft SQL Server\80\Tools\Binn\bcp.exe "SELECT * FROM vw_TZ_forTEST" queryout "D:\TZ.txt" -c -U sa -P -T -q -e "D:\vw_TZ_forTEST.log"
3)错误如下(英文系统中)
SQLState = 37000, NativeError = 446
Error = [Microsoft][ODBC SQL Server Driver][SQL Server]Cannot resolve collation conflict for replace operation.
SQLState = 37000, NativeError = 8180
Error = [Microsoft][ODBC SQL Server Driver][SQL Server]Statement(s) could not be prepared.
9 个解决方案
#1
NCHAR(8)--加Nchar
BCP加上-N 命令
BCP加上-N 命令
#2
有中英文系统,中文系统下安装的是Sql Server2000的排序规则选择Chinese_PRC_BIN,
英文系统下安装的Sql Server2000的排序规则选择为Latin1_General_BIN,
现有1个数据库A,创建时未指定排序规则,其中有1个数据表B,其中的varchar字段创建时也未指定排序规则。
这个表B建立了视图C,其中,对Varchar字段使用了replace函数。
用bcp.exe导出数据时,在中文系统下没有问题,但是在英文系统下会报排序规则冲突。
请问会是什么原因?
沒指定時,字段排序為數據庫的默認排序規則
排序對條件會有影響。。可通過指定排序規序來處理 collate 排序規則
#3
现在查下来,发现问题是这样的。
因为是用安装盘安装的数据库A,而所谓安装其实是在编译服务器上生成数据库,然后备份数据库,
在目的服务器上恢复。因为编译机器是中文的,其Sql Server的实例是Chinese_PRC_BIN,数据库A的排序规则没有指定,
所以是默认,也是Chinese_PRC_BIN。
现在在英文系统上“安装(其实是恢复)”数据库A,这样,数据库A的排序规则还是Chinese_PRC_BIN,
数据表B的varchar字段C的排序规则也是数据库A的默认排序规则(即Chinese_PRC_BIN)
而因为英文系统的实例是Latin1_General_BIN,所以在使用内部函数Replace(字段C, ':', '&')时发生规则冲突.
这里想确认一下:
1)在英文系统上修改字段C的排序规则为Latin1_General_BIN,则问题解决了。
那是否说明Replace内部函数是根据master数据库的排序规则来的(master数据库的排序规则是Latin1_General_BIN)
2)Replace(字段C, ':', '&'),如果不修改字段C的排序规则,还有没有其他的解决方法?
谢谢
因为是用安装盘安装的数据库A,而所谓安装其实是在编译服务器上生成数据库,然后备份数据库,
在目的服务器上恢复。因为编译机器是中文的,其Sql Server的实例是Chinese_PRC_BIN,数据库A的排序规则没有指定,
所以是默认,也是Chinese_PRC_BIN。
现在在英文系统上“安装(其实是恢复)”数据库A,这样,数据库A的排序规则还是Chinese_PRC_BIN,
数据表B的varchar字段C的排序规则也是数据库A的默认排序规则(即Chinese_PRC_BIN)
而因为英文系统的实例是Latin1_General_BIN,所以在使用内部函数Replace(字段C, ':', '&')时发生规则冲突.
这里想确认一下:
1)在英文系统上修改字段C的排序规则为Latin1_General_BIN,则问题解决了。
那是否说明Replace内部函数是根据master数据库的排序规则来的(master数据库的排序规则是Latin1_General_BIN)
2)Replace(字段C, ':', '&'),如果不修改字段C的排序规则,还有没有其他的解决方法?
谢谢
#4
1)在英文系统上修改字段C的排序规则为Latin1_General_BIN,则问题解决了。
那是否说明Replace内部函数是根据master数据库的排序规则来的(master数据库的排序规则是Latin1_General_BIN)
--不是,是根据你当前数据库建立的时候指定的排序规则,但是,通常情况下,如果用户在创建数据库是没有指定对应的规则的话,
--那么默认使用的就是master数据库的排序规则.
2)Replace(字段C, ':', '&'),如果不修改字段C的排序规则,还有没有其他的解决方法?
-- 在字段上加入 ColumnName collate Latin1_General_BIN 试试,
-- 具体例子在你另外一个帖子里面
那是否说明Replace内部函数是根据master数据库的排序规则来的(master数据库的排序规则是Latin1_General_BIN)
--不是,是根据你当前数据库建立的时候指定的排序规则,但是,通常情况下,如果用户在创建数据库是没有指定对应的规则的话,
--那么默认使用的就是master数据库的排序规则.
2)Replace(字段C, ':', '&'),如果不修改字段C的排序规则,还有没有其他的解决方法?
-- 在字段上加入 ColumnName collate Latin1_General_BIN 试试,
-- 具体例子在你另外一个帖子里面
#5
[StartTime] [VARCHAR](100)
COLLATE Latin1_General_BIN NOT NULL,
[EndTime] [VARCHAR](100) COLLATE Latin1_General_BIN NOT NULL,
试试
[EndTime] [VARCHAR](100) COLLATE Latin1_General_BIN NOT NULL,
试试
#6
1
不是
2
不改变列的排序规则(表结构中),但在操作时指定排序规则
比如:
select * from tb where name collate Latin1_General_BIN ='aa'
#7
楼主的视图和表在同一个db下面吗?
你的 bcp 导出的时候, 查询没有指定库名, 你登录的用户设置的默认数据库是什么?
你的 bcp 导出的时候, 查询没有指定库名, 你登录的用户设置的默认数据库是什么?
#8
楼主的视图和表在同一个db下面吗?
>>在同一db下面
你的 bcp 导出的时候, 查询没有指定库名, 你登录的用户设置的默认数据库是什么?
>>查询没有指定库名是我贴漏了。贴上来的时候将其他无关的都删除了,可能删多了。
使用的用户名设置的默认数据库是master。
不过我即使修改了指定的数据库,还是一样的错误。
现在最大的问题是REPLACE(A字段,':','&')报排序规则错误。
此处如果显示指定一个排序规则,譬如REPLACE(A字段,':','&' COLLATE Chinese_PRC_BIN)
或者REPLACE(A字段,':','&' COLLATE Latin1_General_BIN)
结果都是好的。
此外,如果不用view,单单将创建视图的Sql语句导出,譬如:
C:\...\bcp.exe "Select replace(A字段,':','&') as 'starttime' ...." queryout ....
则是没有问题的。
这个也很奇怪。
>>在同一db下面
你的 bcp 导出的时候, 查询没有指定库名, 你登录的用户设置的默认数据库是什么?
>>查询没有指定库名是我贴漏了。贴上来的时候将其他无关的都删除了,可能删多了。
使用的用户名设置的默认数据库是master。
不过我即使修改了指定的数据库,还是一样的错误。
现在最大的问题是REPLACE(A字段,':','&')报排序规则错误。
此处如果显示指定一个排序规则,譬如REPLACE(A字段,':','&' COLLATE Chinese_PRC_BIN)
或者REPLACE(A字段,':','&' COLLATE Latin1_General_BIN)
结果都是好的。
此外,如果不用view,单单将创建视图的Sql语句导出,譬如:
C:\...\bcp.exe "Select replace(A字段,':','&') as 'starttime' ...." queryout ....
则是没有问题的。
这个也很奇怪。
#9
在数据库里,用到的字符串常量难道不是当前数据库的排序规则,而是master数据库的排序规则吗?
譬如:Select ... From db1.table1 where field1='aaa'
我看帮助里有些例子是指定排序规则的:
Select ... From db1.table1 where field1='aaa' collate Latin1_General_BIN
譬如:Select ... From db1.table1 where field1='aaa'
我看帮助里有些例子是指定排序规则的:
Select ... From db1.table1 where field1='aaa' collate Latin1_General_BIN
#1
NCHAR(8)--加Nchar
BCP加上-N 命令
BCP加上-N 命令
#2
有中英文系统,中文系统下安装的是Sql Server2000的排序规则选择Chinese_PRC_BIN,
英文系统下安装的Sql Server2000的排序规则选择为Latin1_General_BIN,
现有1个数据库A,创建时未指定排序规则,其中有1个数据表B,其中的varchar字段创建时也未指定排序规则。
这个表B建立了视图C,其中,对Varchar字段使用了replace函数。
用bcp.exe导出数据时,在中文系统下没有问题,但是在英文系统下会报排序规则冲突。
请问会是什么原因?
沒指定時,字段排序為數據庫的默認排序規則
排序對條件會有影響。。可通過指定排序規序來處理 collate 排序規則
#3
现在查下来,发现问题是这样的。
因为是用安装盘安装的数据库A,而所谓安装其实是在编译服务器上生成数据库,然后备份数据库,
在目的服务器上恢复。因为编译机器是中文的,其Sql Server的实例是Chinese_PRC_BIN,数据库A的排序规则没有指定,
所以是默认,也是Chinese_PRC_BIN。
现在在英文系统上“安装(其实是恢复)”数据库A,这样,数据库A的排序规则还是Chinese_PRC_BIN,
数据表B的varchar字段C的排序规则也是数据库A的默认排序规则(即Chinese_PRC_BIN)
而因为英文系统的实例是Latin1_General_BIN,所以在使用内部函数Replace(字段C, ':', '&')时发生规则冲突.
这里想确认一下:
1)在英文系统上修改字段C的排序规则为Latin1_General_BIN,则问题解决了。
那是否说明Replace内部函数是根据master数据库的排序规则来的(master数据库的排序规则是Latin1_General_BIN)
2)Replace(字段C, ':', '&'),如果不修改字段C的排序规则,还有没有其他的解决方法?
谢谢
因为是用安装盘安装的数据库A,而所谓安装其实是在编译服务器上生成数据库,然后备份数据库,
在目的服务器上恢复。因为编译机器是中文的,其Sql Server的实例是Chinese_PRC_BIN,数据库A的排序规则没有指定,
所以是默认,也是Chinese_PRC_BIN。
现在在英文系统上“安装(其实是恢复)”数据库A,这样,数据库A的排序规则还是Chinese_PRC_BIN,
数据表B的varchar字段C的排序规则也是数据库A的默认排序规则(即Chinese_PRC_BIN)
而因为英文系统的实例是Latin1_General_BIN,所以在使用内部函数Replace(字段C, ':', '&')时发生规则冲突.
这里想确认一下:
1)在英文系统上修改字段C的排序规则为Latin1_General_BIN,则问题解决了。
那是否说明Replace内部函数是根据master数据库的排序规则来的(master数据库的排序规则是Latin1_General_BIN)
2)Replace(字段C, ':', '&'),如果不修改字段C的排序规则,还有没有其他的解决方法?
谢谢
#4
1)在英文系统上修改字段C的排序规则为Latin1_General_BIN,则问题解决了。
那是否说明Replace内部函数是根据master数据库的排序规则来的(master数据库的排序规则是Latin1_General_BIN)
--不是,是根据你当前数据库建立的时候指定的排序规则,但是,通常情况下,如果用户在创建数据库是没有指定对应的规则的话,
--那么默认使用的就是master数据库的排序规则.
2)Replace(字段C, ':', '&'),如果不修改字段C的排序规则,还有没有其他的解决方法?
-- 在字段上加入 ColumnName collate Latin1_General_BIN 试试,
-- 具体例子在你另外一个帖子里面
那是否说明Replace内部函数是根据master数据库的排序规则来的(master数据库的排序规则是Latin1_General_BIN)
--不是,是根据你当前数据库建立的时候指定的排序规则,但是,通常情况下,如果用户在创建数据库是没有指定对应的规则的话,
--那么默认使用的就是master数据库的排序规则.
2)Replace(字段C, ':', '&'),如果不修改字段C的排序规则,还有没有其他的解决方法?
-- 在字段上加入 ColumnName collate Latin1_General_BIN 试试,
-- 具体例子在你另外一个帖子里面
#5
[StartTime] [VARCHAR](100)
COLLATE Latin1_General_BIN NOT NULL,
[EndTime] [VARCHAR](100) COLLATE Latin1_General_BIN NOT NULL,
试试
[EndTime] [VARCHAR](100) COLLATE Latin1_General_BIN NOT NULL,
试试
#6
1
不是
2
不改变列的排序规则(表结构中),但在操作时指定排序规则
比如:
select * from tb where name collate Latin1_General_BIN ='aa'
#7
楼主的视图和表在同一个db下面吗?
你的 bcp 导出的时候, 查询没有指定库名, 你登录的用户设置的默认数据库是什么?
你的 bcp 导出的时候, 查询没有指定库名, 你登录的用户设置的默认数据库是什么?
#8
楼主的视图和表在同一个db下面吗?
>>在同一db下面
你的 bcp 导出的时候, 查询没有指定库名, 你登录的用户设置的默认数据库是什么?
>>查询没有指定库名是我贴漏了。贴上来的时候将其他无关的都删除了,可能删多了。
使用的用户名设置的默认数据库是master。
不过我即使修改了指定的数据库,还是一样的错误。
现在最大的问题是REPLACE(A字段,':','&')报排序规则错误。
此处如果显示指定一个排序规则,譬如REPLACE(A字段,':','&' COLLATE Chinese_PRC_BIN)
或者REPLACE(A字段,':','&' COLLATE Latin1_General_BIN)
结果都是好的。
此外,如果不用view,单单将创建视图的Sql语句导出,譬如:
C:\...\bcp.exe "Select replace(A字段,':','&') as 'starttime' ...." queryout ....
则是没有问题的。
这个也很奇怪。
>>在同一db下面
你的 bcp 导出的时候, 查询没有指定库名, 你登录的用户设置的默认数据库是什么?
>>查询没有指定库名是我贴漏了。贴上来的时候将其他无关的都删除了,可能删多了。
使用的用户名设置的默认数据库是master。
不过我即使修改了指定的数据库,还是一样的错误。
现在最大的问题是REPLACE(A字段,':','&')报排序规则错误。
此处如果显示指定一个排序规则,譬如REPLACE(A字段,':','&' COLLATE Chinese_PRC_BIN)
或者REPLACE(A字段,':','&' COLLATE Latin1_General_BIN)
结果都是好的。
此外,如果不用view,单单将创建视图的Sql语句导出,譬如:
C:\...\bcp.exe "Select replace(A字段,':','&') as 'starttime' ...." queryout ....
则是没有问题的。
这个也很奇怪。
#9
在数据库里,用到的字符串常量难道不是当前数据库的排序规则,而是master数据库的排序规则吗?
譬如:Select ... From db1.table1 where field1='aaa'
我看帮助里有些例子是指定排序规则的:
Select ... From db1.table1 where field1='aaa' collate Latin1_General_BIN
譬如:Select ... From db1.table1 where field1='aaa'
我看帮助里有些例子是指定排序规则的:
Select ... From db1.table1 where field1='aaa' collate Latin1_General_BIN