• 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 ('cq2003','长郡中学高三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 ('200310','张三','cq2003');
    INSERT INTO my_student (sno,sname,cno) VALUES ('200317','李四','cq2003');
    SELECT * FROM my_class;
    SELECT * FROM my_student;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    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 ('cq2003','长郡中学高三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 ('200310','张三','cq2003');
    INSERT INTO my_student (sno,sname,cno) VALUES ('200317','李四','cq2003');
    set names gbk;
    SELECT * FROM my_class;
    SELECT * FROM my_student;
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
  • 相关阅读:
    实现单点登录的方式
    你是否想过,字符串没有属性,为什么可以像对象一样调用
    uni-app:标签中对数据进行判断,看数据前中后是否含有需要的字符startsWith(),endsWith(),includes()
    ubuntu24.04LVM扩容问题
    CSS设置字体样式
    为什么网吧的电脑用起来不卡?
    Springboot总结
    2023-09-09力扣每日一题-补题
    访问者模式
    Python实现可存储的学生信息管理系统(文件+Excel)
  • 原文地址:https://blog.csdn.net/SSS4362/article/details/126374199