从错误的提示信息中发现字符集设置出现问题,连接 mysql 数据库时报此错误
//String url = “jdbc:mysql://localhost:3306/db_cjky” //如果使用这句就会报错。
Unknown initial character set index ‘255’ received from server. Initial client character set can be forced via the ‘characterEncoding’ property.
unknown initial character set index’45’received from server. initial client character set can be foreced via the ‘characterencoding’ property
解决办法:
String url = “jdbc:mysql://localhost:3306/db_cjky?useUnicode=true&characterEncoding=utf8”;
在 MySQL 中时间类型 TIMESTAMP 默认 default 设置为“0000-00-00 00:00:00”,而在 DM 中 TIMESTAMP 类型数据必须在 ‘0001-01-01 00:00:00.000000’ 到 '9999-12-31 23:59:59.999999’之间,“0000-00-0000:00:00”在 DM 中是不合法的。
若源表表定义中存在 TIMESTAMP(0) DEFAULT ‘CURRENT_TIMESTAMP()’,则采用如下解决办法:
复制表定义,将 DEFAULT 'CURRENT_TIMESTAMP()'修改为 DEFAULT SYSDATE,手动创建表。
之后重新使用 DTS 迁移数据,注意要选中该类表,点击【转换】,取消勾选【表定义】,即可正常进行迁移。
DTS 迁移 MYSQL 数据库到达梦数据库,在迁移表结构时,出现"ORIGIN_URL_ID" SMALLINT IDENTITY(2,1) NOT NULL, 非法 IDENTITY 列类型
解决办法:
1、达梦数据库也有自增函数 IDENTITY(2,1),但是只支持 INT ,BIGINT 两种字段类型,需手动修改映射关系为字段 int 或者手动修改 SMALLINT 为 INT 类型再进行建表。
2、发现 IDENTITY 自增列类型错误,IDENTITY 自增列的数据类型只能为 INT 或 BIGINT。将自增列类型 DECIMAL(20,0) 修改为 BIGINT 即可。
解决办法:
报错原因是 JDBC 还没有处理完 resultSet 结果集,又使用同一个 connection 提交了新的 query。
ResultSet 的 JDBC 实现过程:默认情况下,ResultSet 会一次性返回结果集并保存在内存中。这也是最有效率且最容易实现的一种方式。但是当 ResultSet 含有大量数据(很多行、或者包含大对象的情况下)时,JVM 可能无法分配 ResultSet 要求的内存。
因此尝试调整读取行数:
检查该表的 NAMES 字段存放的是否是中文,UTF8 编码。
报错原因:MySQL 中 varchar(1) 可以存一个汉字,DM 数据库是以字节为单位。若是 gb18030 字符集,varchar(2) 才可以存一个汉字;若是 UTF-8 字符集,varchar(3) 才可以存一个汉字。该 NAMES 在 MYSQL 的长度为 10,在迁移过程中,达梦数据库建表的 NAMES 字段长度也是 10,那么就会导致当该字段中文字符超过 4 个的时候,就会出现无法存下的问题。
解决方法:
在此种情况下,为了保证汉字可以完整的被存储,可通过如下两种方法解决:
方法一:扩大字段长度。如 MySQL 表中的 NAMES 字段长度为 10,那么建议在达梦建表的时候该 NAMES 字段长度为 30。
方法二:重新初始化达梦数据库实例,并设置参数 length_in_char=1,即 VARCHAR 类型对象的长度以字符为单位。
Mysql 迁移表到 DM 数据库报错:此列列表已索引,报错截图如下:
在 DM 数据库中查询该表,发现除了报错的索引迁移失败,其他的都迁移成功了。
解决办法:
Mysql 支持对同一字段建多个单列索引,而达梦不支持。根据上述问题分析和报错信息可知,STUDENT_NAME 列有两个单列索引 INDEX_N 和 INDEX_NA,因此在达梦下针对字段再建一个索引则会报错。
避免报错可在 mysql 下执行 drop index index_na on student; 删除索引,或者用其他字段索引或者联合索引代替,对于同一字段建单列索引和联合索引则不受影响,可以正常迁移。
解决:通过采用自定义url的方式,加上字符集编码参数,可以解决。
jdbc:mysql://IP:3306/unipay?useUnicode=true&characterEncoding=utf-8
文章
阅读量
获赞