失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > source命令执行sql脚本在DOS界面出现中文乱码问题

source命令执行sql脚本在DOS界面出现中文乱码问题

时间:2022-01-09 05:55:57

相关推荐

source命令执行sql脚本在DOS界面出现中文乱码问题

source命令执行sql脚本在DOS界面出现中文乱码问题

1 问题出现的形式

1.1 插入不进去中文(1366问题)

1.1.1 错误示例图

1.1.2 原因

因为你文件是以utf8格式进行编写的,导入的时候,会默认以ansi/gbk的格式进行指令的执行,表结构你又设置的字符集又是utf8,表里面的所有字段都会以utf8格式进行存储而你是以ansi/gbk进行输入的,两种编码都不匹配,自然会出现编码的异常了

总结:要求插入时的脚本的字符集要与数据库定义的字符集保持一致,

1.2 能插入中文,但是查询的时候会显示乱码

1.2.1 错误示例图

1.2.2 原因

因为你再INSERT INTO前执行了set names utf8语句

那么他就会把文件的插入指令以utf8的形式去读取执行

你的表结构设置的是utf8格式,字段也自然都是utf8格式

那么插入的时候会成功,不会报错

但是因为dos界面默认是ansi/gbk格式进行展示的

因此你在展示的过程中就需要使用set names gbk让其能正常显示

总结:想要在DOS界面正常显示中文,在脚本的插入数据前加上set name utf8,在插入完成所有的数据后

再一次set names gbk;

2 解决问题的两种思路

2.1 更改sql脚本的格式的保存格式为ANSI编码

2.1.1 使得sql脚本的编码改为ANSI编码

2.1.2 在插入语句前设置set names gbk格式

2.1.3 脚本运行截图

2.1.4 脚本sql语句

/*注意脚本文件要保存成ANSI编码格式的文件*/DROP DATABASE IF EXISTS temp02;CREATE DATABASE IF NOT EXISTS `temp02` CHARACTER SET utf8;use temp02;/*现有父,后有儿子*/CREATE TABLE IF NOT EXISTS `my_class`(`cid` int(10) auto_increment comment '班级id',/*外键在主表中应该是唯一键*/`cno` VARCHAR(30) NOT NULL DEFAULT '*' UNIQUE comment '班级编号',`cname` VARCHAR(255) NOT NULL DEFAULT '*' UNIQUE comment '班级名称',PRIMARY KEY(cid));CREATE TABLE IF NOT EXISTS `my_student`(`sid` int(10) auto_increment comment '学生id',`sno` VARCHAR(30) NOT NULL DEFAULT '*' UNIQUE comment '学生学号',`sname` VARCHAR(30) NOT NULL DEFAULT '*' comment '学生姓名',`cno` VARCHAR(30) NOT NULL DEFAULT '*' comment '班级编号',PRIMARY KEY(sid),FOREIGN KEY(cno) references my_class(cno));/*插入班级表的相关信息*/set names gbk;INSERT INTO my_class (cno,cname) VALUES ('sdfz2001','师大附中高一1班');INSERT INTO my_class (cno,cname) VALUES ('csyz2002','长沙一中高二2班');INSERT INTO my_class (cno,cname) VALUES ('cq','长郡中学高三3班');/*插入学生表的相关信息*/INSERT INTO my_student (sno,sname,cno) VALUES ('200110','张三','sdfz2001');INSERT INTO my_student (sno,sname,cno) VALUES ('200117','李四','sdfz2001');INSERT INTO my_student (sno,sname,cno) VALUES ('200210','张三','csyz2002');INSERT INTO my_student (sno,sname,cno) VALUES ('200217','李四','csyz2002');INSERT INTO my_student (sno,sname,cno) VALUES ('10','张三','cq');INSERT INTO my_student (sno,sname,cno) VALUES ('17','李四','cq');SELECT * FROM my_class;SELECT * FROM my_student;

2.2 更改脚本文件类型(.sql)为utf8的编码格式

2.2.1 是得sql脚本的编码改为UTF8编码

2.2.2 插入语句前set names utf8,保证文件类型和指令执行的类型保持一致

2.2.3 插入语句完成后set names gbk,保证dos界面(控制台)能正常显示

2.2.4 脚本运行截图

2.2.5脚本sql语句(文件需要保存为UTF8格式)

/*脚本sql文件为.sql的后缀名文件文件的编码格式需要保存为utf8的编码格式*/DROP DATABASE IF EXISTS temp02;CREATE DATABASE IF NOT EXISTS `temp02` CHARACTER SET utf8;use temp02;/*现有父,后有儿子*/CREATE TABLE IF NOT EXISTS `my_class`(`cid` int(10) auto_increment comment '班级id',/*外键在主表中应该是唯一键*/`cno` VARCHAR(30) NOT NULL DEFAULT '*' UNIQUE comment '班级编号',`cname` VARCHAR(255) NOT NULL DEFAULT '*' UNIQUE comment '班级名称',PRIMARY KEY(cid));CREATE TABLE IF NOT EXISTS `my_student`(`sid` int(10) auto_increment comment '学生id',`sno` VARCHAR(30) NOT NULL DEFAULT '*' UNIQUE comment '学生学号',`sname` VARCHAR(30) NOT NULL DEFAULT '*' comment '学生姓名',`cno` VARCHAR(30) NOT NULL DEFAULT '*' comment '班级编号',PRIMARY KEY(sid),FOREIGN KEY(cno) references my_class(cno));/*插入班级表的相关信息*/set names utf8;INSERT INTO my_class (cno,cname) VALUES ('sdfz2001','师大附中高一1班');INSERT INTO my_class (cno,cname) VALUES ('csyz2002','长沙一中高二2班');INSERT INTO my_class (cno,cname) VALUES ('cq','长郡中学高三3班');/*插入学生表的相关信息*/INSERT INTO my_student (sno,sname,cno) VALUES ('200110','张三','sdfz2001');INSERT INTO my_student (sno,sname,cno) VALUES ('200117','李四','sdfz2001');INSERT INTO my_student (sno,sname,cno) VALUES ('200210','张三','csyz2002');INSERT INTO my_student (sno,sname,cno) VALUES ('200217','李四','csyz2002');INSERT INTO my_student (sno,sname,cno) VALUES ('10','张三','cq');INSERT INTO my_student (sno,sname,cno) VALUES ('17','李四','cq');set names gbk;SELECT * FROM my_class;SELECT * FROM my_student;

如果觉得《source命令执行sql脚本在DOS界面出现中文乱码问题》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。