Windows下MySQL学习(三):让MySQL数据库支持中文,Matlab导入excel表到数据库

1.疑难问题

通过sql语言向数据库中INSERT中文数据的时候,添加的时候就会报syntax error 或者 显示的是乱码

原因:当初安装数据库是默认的编码是latin1编码(Latin1是ISO-8859-1的别名,有些环境下写作Latin-1),这个不支持中文。

在MySQL Query Browser里查看当前相关的character变量如下,
发现的确server和database都是latin1,而只要把它们修改成UTF8,就可以了。

#查看的语句,当然也可以在cmd的mysql下面查询。
show variables like 'characters%';

这里写图片描述

第一步 修改database的值

建database的时候就要设置character 是UTF8,否则自动默认的都是lartin1,如下建database std2

CREATE DATABASE std2 CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';

如下建立table stdinfo

create TABLE stdinfo (name  CHAR(16),id CHAR(32),gender CHAR, grade CHAR(8), class CHAR(8))  ENGINE=InnoDB DEFAULT CHARSET=utf8;

结果就变更如下:
这里写图片描述

第二步 修改server的值

在安装的mysql目录下,修改my.ini的内容;my.ini没有的话就自己建(复制my_default.ini),再把下面的内容加上去。

[mysqld]
port=3306
character-set-server=utf8
[client]
default-character-set=utf8

然后是在cmd下面关闭mysql,再启动mysql,MySQL Administrator也重新登上去,打开MySQL Query Browser。
查看的结果如下:
这里写图片描述

可以参考:
http://blog.csdn.net/zljjava/article/details/7948111
http://www.cnblogs.com/alamps/archive/2012/11/27/2791312.html
http://dev.mysql.com/doc/refman/5.6/en/faqs-cjk.html

2. Matlab导入excel表到数据库

function s = SavexlsToSQL(filedir)

% 在已有的数据库std2 下创造数据表stdinfo
q=database('std2','root','123456','com.mysql.jdbc.Driver','jdbc:mysql://localhost:3306/std2');
cmd = sprintf('create TABLE stdinfo (name  CHAR(16),id CHAR(32),gender CHAR, grade CHAR(8), class CHAR(8))  ENGINE=InnoDB DEFAULT CHARSET=utf8;');
curs = exec(q,cmd);

% 读入学生信息xls,filedir的地址根据实际情况自己改一下
filedir = 'D:\study\A20\android app开发相关\测试文件\namelist.xls';
[num,txt,raw] = xlsread(filedir,-1); 

%逐行插入学生信息到stdinfo
for i = 2:length(txt)
    line = strcat('''',txt{i,1},''', ''', txt{i,3},''', ''',...
        txt{i,2},''', ''', txt{i,4},''', ''', txt{i,5},'''');
    cmd = sprintf('INSERT INTO std2.stdinfo VALUES(%s)',line);
    curs = exec(q,cmd);
    curs=fetch(curs);
   sprintf(curs.Message)
end

curs = exec(q,'select * from stdinfo');
curs=fetch(curs);

在MySQL Query Browser 查看的效果如下:
这里写图片描述

3. 数据表中添加新的列,以及更新值。

ALTER: 为数据表加入新的一列dir,存学生图片的位置
UPDATE:为新列里面的dir赋予跟学生学号id对应的图片名称,用WHERE来定位。
用matlab实现如下:
注意matlab写字符’ 和字符 \ 的方法

% 加入一个新列 dir ,存学生图片的地址
cmd = sprintf(' ALTER TABLE std2.stdinfo ADD dir CHAR(64)');
for i = 2:length(txt)
    %\\\\的意义: \\代表的是matlab下的一个\,第二个\\代表写入Mysql的一个\.最后写到Mysql下就是显示
    %唯一一个\.
    savedir = sprintf('D:\\\\study\\\\A20\\\\android app开发相关\\\\测试文件\\\\stuImages\\\\');
    pos = strcat(savedir,txt{i,3});
    cmd = sprintf('UPDATE std2.stdinfo SET dir=''%s.jpg'' WHERE id=''%s'' ;',...
          pos, txt{i,3});   
    curs = exec(q,cmd);
    curs=fetch(curs);
    sprintf(curs.Message)
end

在MySQL Query Browser 查看的效果如下:
这里写图片描述

想自己做实验的请下载下面的excel压缩包:
http://download.csdn.net/detail/dahunbi/9668071

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值