mysql数据库之编码重新设置

最近在使用使用mysql数据库的存储过程的时候,发现一些问题,数据库编码和表格、字段的编码不一致

导致运行的时候出现问题,错误提示:1267 - Illegal mix of collations

通过网上的一些方法解决了数据库系统本身的编码,还有边个的编码,但还是没有解决问题,

然后建表的语句导出来看看:

CREATE TABLE `dev_info` (
`id`  int(11) NOT NULL AUTO_INCREMENT ,
`dev_id`  int(10) NOT NULL ,
`dev_sta`  int(5) NOT NULL ,
`sta_name`  varchar(5) CHARACTER SET A COLLATE A_ci NOT NULL ,
`sessionID`  varchar(50) CHARACTER SET A COLLATE A_ci NULL DEFAULT NULL ,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=gb2312 COLLATE=gb2312_chinese_ci
AUTO_INCREMENT=13
ROW_FORMAT=COMPACT
;

编码 A A_ci 只是我举个例子的啊,就是和
gb2312 不一样的编码,


发现问题了,虽然数据库和表格的编码都是一样了,但是字段的编码还不一样,所以需要重新建立表格,

 

建表:

CREATE TABLE `dev_info` (
`id`  int(11) NOT NULL AUTO_INCREMENT ,
`dev_id`  int(10) NOT NULL ,
`dev_sta`  int(5) NOT NULL ,
`sta_name`  varchar(5) CHARACTER SET gb2312 COLLATE gb2312_chinese_ci NOT NULL ,
`sessionID`  varchar(50) CHARACTER SET gb2312 COLLATE gb2312_chinese_ci NULL DEFAULT NULL ,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=gb2312 COLLATE=gb2312_chinese_ci
AUTO_INCREMENT=13
ROW_FORMAT=COMPACT
;

这样就解决问题了,不需要重装什么数据库,

我发现问题是写的一个存储过程里面出现的,顺便把存储过程放出来,就是实现两个字符串的比较

CREATE DEFINER = `root`@`localhost` PROCEDURE `NewProc`(IN `app_dev_id` int,OUT `app_session_id` varchar(50))
BEGIN
    #Routine body goes here...
DECLARE var INT;
SET var = (SELECT COUNT(*) FROM mysql_proce.dev_info WHERE dev_id=app_dev_id);

IF var=1 THEN
    SELECT sessionID INTO app_session_id FROM mysql_proce.dev_info WHERE dev_id=app_dev_id;
END IF;
END;

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。