Windows下用GCC连接MySQL数据库
一个网友在坛子上问到的问题,说用MinGW GCC编译运行一个连接MySQL数据库的程序时遇到错误:
undefined reference to `mysql_init@4'
undefined reference to `mysql_real_connect@32'
undefined reference to `mysql_close@4'
我遂去MySQL官网下了个最新的Windows C Connector,然后按正常思路写了个最简单的连接测试程序,果然出现了同样的错误。
后来在网上查了下,也看了下Mysql官网上别人的讨论,据称MySQL官方下载的Windows C开发包只能原生态支持CL编译器,而用GCC也并非不可,只是需要做一些额外的工作。先将后来试验成功的步骤笔记于此,主要参考有http://dev.mysql.com/doc/refman/5.0/en/windows-client-compiling.html。
先下载一下MinGW工具包,下载地址是http://prdownloads.sourceforge.net/mingw/mingw-utils-0.2.tar.gz?download
解压,将此工具包中的bin目录加入系统环境变量的Path变量。
在Mysql开发包的lib目录下,即libmysql.lib和libmysql.dll的所在目录,运行
reimp -d libmysql.lib
得到导出文件LIBMYSQL.def,
然后在此目录运行MinGW GCC本身自带的命令
dlltool -k -d libmysql.def -l libmysql.a
得到我们最后需要链接的库文件libmysql.a。
在Mysql开发包的目录下(即与include和lib同级)新建我们的测试文件main.c,测试源码如下:
#include <stdio.h>
#include <winsock2.h>
#include "mysql.h"
int main()
{
MYSQL mysql;
mysql_init(&mysql);
if(!mysql_real_connect(&mysql, "localhost", "root", "admin", "demo", 3306, NULL, 0))
{
printf("\nconnect error!");
}
else
{
printf("\nconnect success!\n");
}
mysql_close(&mysql);
return 0;
}
在源文件所在路径运行编译命令:
gcc -Iinclude -Llib main.c -llibmysql
即编译成功。数据库亦连接成功。
测试环境:
操作系统:Windows XP Prefessional sp2
数据库版本:MySQL-5.0.22-commu
相关文档:
1.建表过程如下
create database test default character set utf8 collate utf8_general_ci
use test;
create table devicedata
(
ID int auto_increment PRIMARY key ,
TimeStamp datetime,
Device_Name varchar(100),
Tag_Name varchar(100),
Value varchar(50)
)
2 ......
1、打开文本编辑my.cnf
sudo gedit /etc/mysql/my.cnf
在[client]
节点,添加
default-character-set=utf8 (客户端缺省以utf8存储)
在[mysqld]
节点,添加
default-character-set=utf8 (数据库缺省以utf8存储)
init_connect='SET NAMES utf8'
(设定连接mysql数据库时使用utf8编码,以让mysql数据库为utf8 ......
MySQL的字符集支持(Character Set Support)有两个方面:
字符集(Character set)和排序方式(Collation)。
对于字符集的支持细化到四个层次:
服务器(server),数据库(database),数据表(table)和连接(connection)。
1.MySQL默认字符集
MySQL对于字符集的 ......
1: ASCII(str) 返回字符串str的第一个字符的ASCII值(str是空串时返回0) mysql> select ASCII('2'); -> 50 mysql> select ASCII(2); -> 50 mysql> select ASCII('dete'); -> 100
2:ORD(str) 如果字符串str句首是单字节返回与ASCII()函数返回的相同值。 如果是一个多字节字符,以格式返 ......