求助MYSQL千万数据导入到sqlserver2005变成乱码,我用的是工具是dts通过odbc连接连转换的

时间:2021-10-16 06:38:32
求助MYSQL千万数据导入到sqlserver2005变成乱码,我用的是工具是dts通过odbc连接连转换的,sqlserver2005把dts改成说法是ssis

给大家看一下我的mysql数据结构表
我只有真实用户名字的字段是中文的


CREATE TABLE oa(
  email  varchar(100) collate utf8_bin NOT NULL,
  realname varchar(100) collate utf8_bin NOT NULL,
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

13 个解决方案

#1


你在导之间把两个库的字符集设置成一样.

以下为查看和更改SQL SERVER的字符集

use master 
select * from syscharsets

1.用sp_helpsort就可以查出当前sql的排序规则,字符集就是用排序规则的前半部分来表达的。 
2.用全局变量@@language可以看你当前的语言,用sp_helplanguage可以查看当前语言的详细格式 
3.用sp_enumcodepages可以查看sql支持字符集,但并没有与1中的排序规则前部分对应 

所以要查看sql的字符集,应该是用sp_helpsort得出的结果,
再看结果的前半部比如chinese_prc就代表简体中文的Unicode字符,


默认字符集
Alter database 数据库名称 Collate Chinese_PRC_BIN 
排序
ALTER DATABASE 数据库名 COLLATE 排序规则名 


至于MYSQL里面的字符集如何查询和更改就不知道了.帮顶.

#2


2005的字符集是不让修改的。

#3


--1. 为数据库指定排序规则
CREATE DATABASE db COLLATE Chinese_PRC_CI_AS
GO

ALTER DATABASE db COLLATE Chinese_PRC_BIN
GO


/*====================================*/


--2. 为表中的列指定排序规则
CREATE TABLE tb(
col1 varchar(10),
col2 varchar(10) COLLATE Chinese_PRC_CI_AS)
GO

ALTER TABLE tb ADD col3 varchar(10) COLLATE Chinese_PRC_BIN
GO

ALTER TABLE tb ALTER COLUMN col2 varchar(10) COLLATE Chinese_PRC_BIN
GO


/*====================================*/


--3. 为字符变量和参数应用排序规则
DECLARE @a varchar(10),@b varchar(10)
SELECT @a='a',@b='A'

--使用排序规则 Chinese_PRC_CI_AS
SELECT CASE WHEN @a COLLATE Chinese_PRC_CI_AS = @b THEN '@a=@b' ELSE '@a<>@b' END
--结果:@a=@b

--使用排序规则 Chinese_PRC_BIN
SELECT CASE WHEN @a COLLATE Chinese_PRC_BIN = @b THEN '@a=@b' ELSE '@a<>@b' END
--结果:@a<>@b

#4


mysql中charset为utf-8你的sql2005中表中相应字段,如果是chinese_prc_****排序规则,应该是不会乱码的。
或者把sql2005 中相应字段列类型改为nvarchar

#5


此問題我也遇到過:
   從oracle數據庫表數據在導入sql2000數據庫表數據時,我用了sql link方法:
   select * from openquery(ora,'select * from bom_loc')數據顯示中文是亂碼的,我在自己的機子上測試,安裝了 oacle net manager再配置連接,居然不亂碼了,顯示一切正常;建議樓主修改字符集或按照我的方法試試,sql2008查詢也通過!

#6


此問題我也遇到過:
   從oracle數據庫表數據在導入sql2000數據庫表數據時,我用了sql link方法:
   select * from openquery(ora,'select * from bom_loc')數據顯示中文是亂碼的,我在自己的機子上測試,安裝了 oacle net manager再配置連接,居然不亂碼了,顯示一切正常;建議樓主修改字符集或按照我的方法試試,sql2008查詢也通過!

#7


mssql里字符串的栏位改成nvarchar

#8


关注

#9


我测试看看.这几天比较忙.没有看.大家等我好消息.哈哈

#10


引用楼主 sqlserveraihaozhe 的帖子:
求助MYSQL千万数据导入到sqlserver2005变成乱码,我用的是工具是dts通过odbc连接连转换的,sqlserver2005把dts改成说法是ssis 

给大家看一下我的mysql数据结构表 
我只有真实用户名字的字段是中文的 


CREATE TABLE oa( 
  email  varchar(100) collate utf8_bin NOT NULL, 
  realname varchar(100) collate utf8_bin NOT NULL, 
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; 


该成 --在最后面的 not null去掉,号

CREATE TABLE oa( 
  email  varchar(100) collate utf8_bin NOT NULL, 
  realname varchar(100) collate utf8_bin NOT NULL
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin 
[/Quote]

#11


哈哈.我已经解决了,要散分给你们咯.解决方式是odbc版本问题.我以前用的是mysql-5.0.24-win32
与odbc3.1版本的.现在改成ODBC5·1 这样转换就没有问题了.为什么是版本问题呢.因为我转换的时候
用的dts,而dts正是通过odbc驱动来转换数据的.ok.谢谢各位的热情,让我们学到更多的知识

#12


楼主,有联系方式嘛?后来导的乱码问题解决了!?!!???!????我的QQ:273246353。。。也遇到同样棘手的问题

#13


我也遇到了!!!

#1


你在导之间把两个库的字符集设置成一样.

以下为查看和更改SQL SERVER的字符集

use master 
select * from syscharsets

1.用sp_helpsort就可以查出当前sql的排序规则,字符集就是用排序规则的前半部分来表达的。 
2.用全局变量@@language可以看你当前的语言,用sp_helplanguage可以查看当前语言的详细格式 
3.用sp_enumcodepages可以查看sql支持字符集,但并没有与1中的排序规则前部分对应 

所以要查看sql的字符集,应该是用sp_helpsort得出的结果,
再看结果的前半部比如chinese_prc就代表简体中文的Unicode字符,


默认字符集
Alter database 数据库名称 Collate Chinese_PRC_BIN 
排序
ALTER DATABASE 数据库名 COLLATE 排序规则名 


至于MYSQL里面的字符集如何查询和更改就不知道了.帮顶.

#2


2005的字符集是不让修改的。

#3


--1. 为数据库指定排序规则
CREATE DATABASE db COLLATE Chinese_PRC_CI_AS
GO

ALTER DATABASE db COLLATE Chinese_PRC_BIN
GO


/*====================================*/


--2. 为表中的列指定排序规则
CREATE TABLE tb(
col1 varchar(10),
col2 varchar(10) COLLATE Chinese_PRC_CI_AS)
GO

ALTER TABLE tb ADD col3 varchar(10) COLLATE Chinese_PRC_BIN
GO

ALTER TABLE tb ALTER COLUMN col2 varchar(10) COLLATE Chinese_PRC_BIN
GO


/*====================================*/


--3. 为字符变量和参数应用排序规则
DECLARE @a varchar(10),@b varchar(10)
SELECT @a='a',@b='A'

--使用排序规则 Chinese_PRC_CI_AS
SELECT CASE WHEN @a COLLATE Chinese_PRC_CI_AS = @b THEN '@a=@b' ELSE '@a<>@b' END
--结果:@a=@b

--使用排序规则 Chinese_PRC_BIN
SELECT CASE WHEN @a COLLATE Chinese_PRC_BIN = @b THEN '@a=@b' ELSE '@a<>@b' END
--结果:@a<>@b

#4


mysql中charset为utf-8你的sql2005中表中相应字段,如果是chinese_prc_****排序规则,应该是不会乱码的。
或者把sql2005 中相应字段列类型改为nvarchar

#5


此問題我也遇到過:
   從oracle數據庫表數據在導入sql2000數據庫表數據時,我用了sql link方法:
   select * from openquery(ora,'select * from bom_loc')數據顯示中文是亂碼的,我在自己的機子上測試,安裝了 oacle net manager再配置連接,居然不亂碼了,顯示一切正常;建議樓主修改字符集或按照我的方法試試,sql2008查詢也通過!

#6


此問題我也遇到過:
   從oracle數據庫表數據在導入sql2000數據庫表數據時,我用了sql link方法:
   select * from openquery(ora,'select * from bom_loc')數據顯示中文是亂碼的,我在自己的機子上測試,安裝了 oacle net manager再配置連接,居然不亂碼了,顯示一切正常;建議樓主修改字符集或按照我的方法試試,sql2008查詢也通過!

#7


mssql里字符串的栏位改成nvarchar

#8


关注

#9


我测试看看.这几天比较忙.没有看.大家等我好消息.哈哈

#10


引用楼主 sqlserveraihaozhe 的帖子:
求助MYSQL千万数据导入到sqlserver2005变成乱码,我用的是工具是dts通过odbc连接连转换的,sqlserver2005把dts改成说法是ssis 

给大家看一下我的mysql数据结构表 
我只有真实用户名字的字段是中文的 


CREATE TABLE oa( 
  email  varchar(100) collate utf8_bin NOT NULL, 
  realname varchar(100) collate utf8_bin NOT NULL, 
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; 


该成 --在最后面的 not null去掉,号

CREATE TABLE oa( 
  email  varchar(100) collate utf8_bin NOT NULL, 
  realname varchar(100) collate utf8_bin NOT NULL
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin 
[/Quote]

#11


哈哈.我已经解决了,要散分给你们咯.解决方式是odbc版本问题.我以前用的是mysql-5.0.24-win32
与odbc3.1版本的.现在改成ODBC5·1 这样转换就没有问题了.为什么是版本问题呢.因为我转换的时候
用的dts,而dts正是通过odbc驱动来转换数据的.ok.谢谢各位的热情,让我们学到更多的知识

#12


楼主,有联系方式嘛?后来导的乱码问题解决了!?!!???!????我的QQ:273246353。。。也遇到同样棘手的问题

#13


我也遇到了!!!