Mysql
简单使用总结
今天说是要测试
mysql
在插入大数据类型时的性能,所以我就下载了
Mysql5.0
以及
mysql odbc driver 3.51
版本,可是还是不会使用
。在网上搜资料啊,不断的尝试啊,总算是能上数据库启动起来了。今天写成个简单的帖子,让
Mysql
初学者或者简单应用
mysql
的人有点看头。
1.
安装
Mysql
这个比较简单,就是最按照提示安装就可以了,但是有一个地方需要注意,那就是配置
Mysql
数据库的时候设置密码的地方,一定要记住密码,否则
client
工具就启动不起来了。
2.
一般来说,安装完毕后,
mysql
就已经启动起来了,打开任务管理器,可以看到
mysqld-nt.exe
在运行,这个就是服务器了。如果想重启这个服务,可以在任务管理器中将这个进程停止,然后在控制面板
—>
管理工具
—>
服务
à
mysql
启动。(我还没有找到其他的方法)。
3.
使用客户端工具
Mysql.
开始
à
程序
à
Mysql
à
mysql server5.0
à
mysql
,这个时候需要输入密码,如果密码正确,则会出现
mysql>
这样的提示,如果密码错误,就会直接退出。这里输入的密码就是在配置
Mysql
数据库的时候设置的密码。
数据库客户端启动了,那么我们现在需要连接数据库,不知道为什么
Mysql
不用
connect to xxx
这样的语法,而是用了一个非常奇怪的语法:
例如,我们新建了一个数据库:
create database test;
这时,我们使用
Mysql > use test;
就连接到了
test
数据库,连接建立后,我们就可以做一系列的简单操作了。
4.
服务器:一般来说,
mysqld-nt.exe
启动以后,所有的数据库都已经启动了。、
5.
通过
ODBC
数据源来连接数据库
控制面板
—>
管理工具
à
ODBC
数据源
à
系统
DSN
à
添加
à
Mysql odbc 3.51 driver
Database name :
这个就是你在程序中要使用的名字
Descriprion:
这个不重要,写不写都可以
Server :
如果是本台计算机,就写
127.0.0.1
,否则,请写入正确的
IP
。
Port :
默认是
3306
,如果你修改过,请填入正确的端口
User : root (
这里我不知道为什么是
root
,可能是受
linux
的影响吧
)
Passwd:
密码,这里输入的密码就是在配置
Mysql
数据库的时候设置的密码。
Database:
如果以上设置成功,拉开下拉式菜单,就可以看到所有的数据库。
设置完了以后,可以
test
来测试是否成功。
6.
关于编码
a) 查看默认字符集 ( 默认情况下, mysql 的字符集是 latin1(ISO_8859_1)
通常,查看系统的字符集和排序方式的设定可以通过下面的两条命令:
mysql> SHOW VARIABLES LIKE 'character%';
+--------------------------+---------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | D:"mysql-5.0.37"share"charsets" |
+--------------------------+---------------------------------+
mysql> SHOW VARIABLES LIKE 'collation_%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+
b) 修改默认字符集
最简单的修改 方法 ,就是修改 mysql 的 my.ini(linux 系统为 my.cnf) 文件中的字符集键值,
如
在 [client] 下面加上
default-character-set = utf8
在 [mysqld] 下面加上
character_set_server = utf8
default-character-set = utf8
character-set-server = utf8
collation-server = latin1_swedish_ci
init_connect = 'SET collation_connection = utf8_general_ci'
init_connect = 'SET NAMES utf8'
修改完后,重启 mysql 的服务, service mysql restart
使用 mysql> SHOW VARIABLES LIKE 'character%'; 查看,发现数据库编码均已改成 utf8
+--------------------------+---------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | D:"mysql-5.0.37"share"charsets" |
+--------------------------+---------------------------------+
c) 还有一种修改字符集的方法,就是使用 mysql 的命令
mysql> SET character_set_client = utf8 ;
mysql> SET character_set_connection = utf8 ;
mysql> SET character_set_database = utf8 ;
mysql> SET character_set_results = utf8 ;
mysql> SET character_set_server = utf8 ;
mysql> SET collation_connection = utf8 ;
mysql> SET collation_database = utf8 ;
mysql> SET collation_server = utf8 ;
服务器将
character_set_system
系统变量设置为元数据字符集的名
7
.实际范例:
#include <stdio.h>
#include <string.h>
//#include <sql.h>
#include <windows.h>
#include <sqlext.h>
//#include <sqlopt.h>
#include <sqltypes.h>
#define DBNAME "mysqlu8db"
#define UID
"root"
#define PWD
"test"
#define BUFSZ 10
void main()
{
HENV henv;
HDBC hdbc;
HSTMT hstmt;
char buf[BUFSZ+1] ="乐乐乐乐乐";
int len1,prgbvar;
int rc;
SQLCHAR sqlstate[100] = {0};
SQLCHAR errmsg[1000] ={0};
SQLSMALLINT pfnativeerror,szerrmsg;
rc = SQLAllocHandle(SQL_HANDLE_ENV,NULL,&henv);
rc = SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(void *)SQL_OV_ODBC3,0);
rc = SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc);
rc = SQLSetConnectAttr(hdbc,SQL_AUTOCOMMIT, SQL_AUTOCOMMIT_ON,0);
rc = SQLConnect(hdbc,DBNAME,SQL_NTS,UID,SQL_NTS,PWD,SQL_NTS);
if(rc)
printf("connect error");
rc = SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt);
rc = SQLExecDirect(hstmt,"drop table testclob",SQL_NTS);
rc = SQLExecDirect(hstmt,"set character_set_client=gbk",SQL_NTS);
rc = SQLExecDirect(hstmt,"set character_set_connection=gbk",SQL_NTS);
rc = SQLExecDirect(hstmt,"set character_set_results=gbk",SQL_NTS);
//rc = SQLExecDirect(hstmt,"drop table testclob",SQL_NTS);
//rc = SQLExecDirect(hstmt,"drop table testclob",SQL_NTS);
rc = SQLPrepare(hstmt,"create table testclob(c1 long varchar)",SQL_NTS);
rc = SQLExecute(hstmt);
rc = SQLPrepare(hstmt,"insert into testclob values(?)",SQL_NTS);
len1 = SQL_DATA_AT_EXEC;
rc=SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_LONGVARCHAR,0,0,NULL,0,&len1);
rc = SQLExecute(hstmt);
if(rc == SQL_NEED_DATA)
{
while((rc = SQLParamData(hstmt,(PTR FAR *)&prgbvar)) == SQL_NEED_DATA)
{
rc = SQLPutData(hstmt,buf,BUFSZ);
}
if(rc)
{
SQLError(henv,hdbc,hstmt,sqlstate,&pfnativeerror,errmsg,1000,&szerrmsg); ------------------------------------------------------10
}
}
rc = SQLDisconnect(hdbc);
}
在标记为
10
的地方(蓝色字体的部分),
rc
返回的是
-1
,
errmsg
的内容是“
data too long for column 1 in ‘c1’
”
,
我但是非常奇怪,不知道出现了什么问题,
用
Mysql
去看:
Mysql > select * from testclob;
Empty set (0.02s)
几次折腾,上网搜集,才找到解决的办法:
在
my.ini
里找到
sql-mode=”STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”
把其中的
STRICT_TRANS_TABLES,
去掉,或者把
sql-mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
注释掉,然后重启
mysql
就
ok
了
至于具体的原因,我到现在还不知道。