JDBC连接MYSQL数据库,使用MATLAB读写中文数据出现乱码,是由于MYSQL本身的配置问题
试验数据库的编码为UTF8,操作系统为中文WINDOWS,即操作系统的编码是GBK,如果不对MYSQL的字符编码进行配置,将产生乱码。
配置方法为:
修改MySQL文件夹下的my.ini文件。如下:
[mysql]
default-character-set=utf8
[mysqld]
default-character-set=utf8
或者将下面的这段
## UTF 8 Settings
#init-connect=\'SET NAMES utf8\'
#collation_server=utf8_unicode_ci
#character_set_server=utf8
#skip-character-set-client-handshake
#character_sets-dir="E:/xampp/mysql/share/charsets"
的#character_set_server=utf8的注释符“#”去掉
## UTF 8 Settings
#init-connect=\'SET NAMES utf8\'
#collation_server=utf8_unicode_ci
character_set_server=utf8
#skip-character-set-client-handshake
#character_sets-dir="E:/xampp/mysql/share/charsets"
重新启动MYSQL,中文乱码消失,下面是验证过程:
1、连接数据库
>> myconn=database('mystudent','root','','com.mysql.jdbc.Driver','jdbc:mysql://localhost:3306/mystudent')
myconn =
Instance: 'mystudent'
UserName: 'root'
Driver: 'com.mysql.jdbc.Driver'
URL: 'jdbc:mysql://localhost:3306/mystudent'
Constructor: [1x1 com.mathworks.toolbox.database.databaseConnect]
Message: []
Handle: [1x1 com.mysql.jdbc.JDBC4Connection]
TimeOut: 0
AutoCommit: 'on'
Type: 'Database Object'
2、建立游标
>> mycurs=exec(myconn,'select * from myst')
mycurs =
Attributes: []
Data: 0
DatabaseObject: [1x1 database]
RowLimit: 0
SQLQuery: 'select * from myst'
Message: []
Type: 'Database Cursor Object'
ResultSet: [1x1 com.mysql.jdbc.JDBC4ResultSet]
Cursor: [1x1 com.mathworks.toolbox.database.sqlExec]
Statement: [1x1 com.mysql.jdbc.StatementImpl]
Fetch: 0
>> a=fetch(mycurs)
a =
Attributes: []
Data: {2x2 cell}
DatabaseObject: [1x1 database]
RowLimit: 0
SQLQuery: 'select * from myst'
Message: []
Type: 'Database Cursor Object'
ResultSet: [1x1 com.mysql.jdbc.JDBC4ResultSet]
Cursor: [1x1 com.mathworks.toolbox.database.sqlExec]
Statement: [1x1 com.mysql.jdbc.StatementImpl]
Fetch: [1x1 com.mathworks.toolbox.database.fetchTheData]
3、读取数据,可以看到中文正常
>> a.Data
ans =
'上大' [1]
'追求' [0]
4、写数据,查看中文是否正常
>> colnames={'name','确定否'}
colnames =
'name' '确定否'
>> insert(myconn,'myst',colnames,{'张三',logical(1)})
>>
重新读取数据
>> mycurs=exec(myconn,'select * from myst')
mycurs =
Attributes: []
Data: 0
DatabaseObject: [1x1 database]
RowLimit: 0
SQLQuery: 'select * from myst'
Message: []
Type: 'Database Cursor Object'
ResultSet: [1x1 com.mysql.jdbc.JDBC4ResultSet]
Cursor: [1x1 com.mathworks.toolbox.database.sqlExec]
Statement: [1x1 com.mysql.jdbc.StatementImpl]
Fetch: 0
>> a=fetch(mycurs)
a =
Attributes: []
Data: {3x2 cell}
DatabaseObject: [1x1 database]
RowLimit: 0
SQLQuery: 'select * from myst'
Message: []
Type: 'Database Cursor Object'
ResultSet: [1x1 com.mysql.jdbc.JDBC4ResultSet]
Cursor: [1x1 com.mathworks.toolbox.database.sqlExec]
Statement: [1x1 com.mysql.jdbc.StatementImpl]
Fetch: [1x1 com.mathworks.toolbox.database.fetchTheData]
>>
>> a.Data
ans =
'上大' [1]
'追求' [0]
'张三' [1]
>>