Cari di MySQL 
    MySQL Manual
Daftar Isi
(Sebelumnya) 21. MySQL Performance Schema22.2. MySQL Connector/Net (Berikutnya)

Chapter 22. Connectors and APIs

Daftar Isi

22.1. MySQL Connector/ODBC
22.1.1. Connector/ODBC Versions
22.1.2. Connector/ODBC Introduction
22.1.3. Connector/ODBC Installation
22.1.4. Configuring Connector/ODBC
22.1.5. Connector/ODBC Examples
22.1.6. Connector/ODBC Reference
22.1.7. Connector/ODBC Notes and Tips
22.1.8. Connector/ODBC Support
22.2. MySQL Connector/Net
22.2.1. Connector/Net Versions
22.2.2. Installing Connector/Net
22.2.3. Connector/Net Visual Studio Integration
22.2.4. Connector/Net Tutorials
22.2.5. Connector/Net Programming
22.2.6. Connector/Net Connection String Options Reference
22.2.7. Connector/Net API Reference
22.2.8. Connector/Net Support
22.2.9. Connector/Net FAQ
22.3. MySQL Connector/J
22.3.1. Overview of MySQL Connector/J
22.3.2. Connector/J Versions
22.3.3. Connector/J Installation
22.3.4. Connector/J Examples
22.3.5. Connector/J (JDBC) Reference
22.3.6. JDBC Concepts
22.3.7. Connection Pooling with Connector/J
22.3.8. Load Balancing with Connector/J
22.3.9. Failover with Connector/J
22.3.10. Using the Connector/J Interceptor Classes
22.3.11. Using Connector/J with Tomcat
22.3.12. Using Connector/J with JBoss
22.3.13. Using Connector/J with Spring
22.3.14. Using Connector/J with GlassFish
22.3.15. Troubleshooting Connector/J Applications
22.3.16. Connector/J Support
22.4. MySQL Connector/C++
22.4.1. Installing the MySQL Connector/C++ Binary
22.4.2. Installing MySQL Connector/C++ from Source
22.4.3. MySQL Connector/C++ Building Windows Applications with Microsoft Visual Studio
22.4.4. MySQL Connector/C++ Building Linux Applications with NetBeans
22.4.5. MySQL Connector/C++ Getting Started: Usage Examples
22.4.6. MySQL Connector/C++ Tutorials
22.4.7. MySQL Connector/C++ Debug Tracing
22.4.8. MySQL Connector/C++ Usage Notes
22.4.9. MySQL Connector/C++ Known Bugs and Issues
22.4.10. MySQL Connector/C++ Feature requests
22.4.11. MySQL Connector/C++ Support
22.5. MySQL Connector/C
22.5.1. Building MySQL Connector/C from the Source Code
22.5.2. Testing MySQL Connector/C
22.5.3. MySQL Connector/C FAQ
22.6. MySQL Connector/Python
22.6.1. Guidelines for Python Developers
22.6.2. Connector/Python Versions
22.6.3. Connector/Python Installation
22.6.4. Connector/Python Coding Examples
22.6.5. Connector/Python Tutorials
22.6.6. Connector/Python Connection Arguments
22.6.7. Connector/Python API Reference
22.6.8. Connector/Python FAQ
22.7. libmysqld, the Embedded MySQL Server Library
22.7.1. Compiling Programs with libmysqld
22.7.2. Restrictions When Using the Embedded MySQL Server
22.7.3. Options with the Embedded Server
22.7.4. Embedded Server Examples
22.8. MySQL C API
22.8.1. C API Data Structures
22.8.2. C API Function Overview
22.8.3. C API Function Descriptions
22.8.4. C API Prepared Statements
22.8.5. C API Prepared Statement Data Structures
22.8.6. C API Prepared Statement Function Overview
22.8.7. C API Prepared Statement Function Descriptions
22.8.8. C API Threaded Function Descriptions
22.8.9. C API Embedded Server Function Descriptions
22.8.10. C API Client Plugin Functions
22.8.11. Common Questions and Problems When Using the C API
22.8.12. Controlling Automatic Reconnection Behavior
22.8.13. C API Support for Multiple Statement Execution
22.8.14. C API Prepared Statement Problems
22.8.15. C API Prepared Statement Handling of Date and Time Values
22.8.16. C API Support for Prepared CALL Statements
22.8.17. Building Client Programs
22.9. MySQL PHP API
22.9.1. Overview of the MySQL PHP drivers
22.9.2. Original MySQL API (Mysql)
22.9.3. MySQL Improved Extension (Mysqli)
22.9.4. MySQL Functions (PDO_MYSQL) (MySQL (PDO))
22.9.5. MySQL Native Driver (Mysqlnd)
22.9.6. Mysqlnd replication and load balancing plugin (mysqlnd_ms)
22.9.7. Mysqlnd query result cache plugin (mysqlnd_qc)
22.9.8. Mysqlnd user handler plugin (mysqlnd_uh)
22.9.9. Mysqlnd connection multiplexing plugin (mysqlnd_mux)
22.9.10. Mysqlnd Memache plugin (mysqlnd_memcache)
22.9.11. Connector/PHP
22.9.12. Common Problems with MySQL and PHP
22.9.13. Enabling Both mysql and mysqli in PHP
22.10. MySQL Perl API
22.11. MySQL Python API
22.12. MySQL Ruby APIs
22.12.1. The MySQL/Ruby API
22.12.2. The Ruby/MySQL API
22.13. MySQL Tcl API
22.14. MySQL Eiffel Wrapper

MySQL Connectors provide connectivity to the MySQL server for client programs. APIs provide low-level access to the MySQL protocol and MySQL resources. Both Connectors and the APIs enable you to connect and execute MySQL statements from another language or environment, including Java (JDBC), ODBC, Perl, Python, PHP, Ruby, and native C and embedded MySQL instances.

Note

Connector version numbers do not correlate with MySQL Server version numbers. See also Table 22.2, "MySQL Connector Versions and MySQL Server Versions".

A number of connectors are developed by MySQL:

  • Connector/ODBC provides driver support for connecting to a MySQL server using the Open Database Connectivity (ODBC) API. Support is available for ODBC connectivity from Windows, Unix and Mac OS X platforms.

  • Connector/Net enables developers to create .NET applications that use data stored in a MySQL database. Connector/Net implements a fully functional ADO.NET interface and provides support for use with ADO.NET aware tools. Applications that want to use Connector/Net can be written in any of the supported .NET languages.

    The MySQL Visual Studio Plugin works with Connector/Net and Visual Studio 2005. The plugin is a MySQL DDEX Provider, which means that you can use the schema and data manipulation tools within Visual Studio to create and edit objects within a MySQL database.

  • Connector/J provides driver support for connecting to MySQL from a Java application using the standard Java Database Connectivity (JDBC) API.

  • Connector/Python provides driver support for connecting to MySQL from a Python program using an API that is compliant with the Python DB API version 2.0. No additional Python modules or MySQL client libraries are required.

  • Connector/C++ is a tool that enables easy deployment and management of MySQL server and database through your C++ application.

  • Connector/C is a standalone replacement for the MySQL Client Library (libmysql).

There are two direct access methods for using MySQL natively within a C application:

  • The C API provides low-level access to the MySQL protocol through the libmysql client library; this is the primary method used to connect to an instance of the MySQL server, and is used both by MySQL command line clients and many of the APIs also detailed in this section. MySQL Connector/C can now also be used for this purpose.

  • libmysqld is an embedded MySQL server library that enables you to embed an instance of the MySQL server into your C applications.

If you need to access MySQL from a C application, or build an interface to MySQL for a language not supported by the Connectors or APIs in this chapter, the C API is where you would start. A number of programmers utilities are available to help with the process, and also covered in this section.

The remaining APIs provide an interface to MySQL from specific application languages. These solutions are not developed or supported by MySQL. Basic information on their usage and abilities is provided here for reference purposes only.

All the language APIs are developed using one of two methods, using libmysql or by building a native driver. The two solutions offer different benefits:

  • Using libmysql offers complete compatibility with MySQL as it uses the same libraries as the MySQL client applications. However, the feature set is limited to the implementation and interfaces exposed through libmysql and the performance may be lower as data is copied between the native language, and the MySQL API components. MySQL Connector/C is a possible alternative to using libmysql.

  • Native drivers are an implementation of the MySQL network protocol entirely within the host language or environment. Native drivers are fast, as there is less copying of data between components, and they can offer advanced functionality not available through the standard MySQL API. Native drivers are also easier to build and deploy, as you do not need a copy of the MySQL client libraries to build the native driver components.

A list of many of the libraries and interfaces available for MySQL are shown in the table. See Table 22.1, "MySQL APIs and Interfaces".

Table 22.1. MySQL APIs and Interfaces

EnvironmentAPITypeNotes
AdaMySQL Bindings for GNU AdalibmysqlSee MySQL Bindings for GNU Ada
CConnector/CReplacement for libmysqlSee Section 22.5, "MySQL Connector/C".
C++Connector/C++libmysqlSee Section 22.4, "MySQL Connector/C++".
 MySQL++libmysqlSee MySQL++ Web site.
 MySQL wrappedlibmysqlSee MySQL wrapped.
CocoaMySQL-CocoalibmysqlCompatible with the Objective-C Cocoa environment. See http://mysql-cocoa.sourceforge.net/
DMySQL for DlibmysqlSee MySQL for D.
EiffelEiffel MySQLlibmysqlSee Section 22.14, "MySQL Eiffel Wrapper".
Erlangerlang-mysql-driverlibmysqlSee erlang-mysql-driver.
HaskellHaskell MySQL BindingsNative DriverSee Brian O'Sullivan's pure Haskell MySQL bindings.
 hsql-mysqllibmysqlSee MySQL driver for Haskell .
Java/JDBCConnector/JNative DriverSee Section 22.3, "MySQL Connector/J".
KayaMyDBlibmysqlSee MyDB.
LuaLuaSQLlibmysqlSee LuaSQL.
.NET/MonoConnector/NetNative DriverSee Section 22.2, "MySQL Connector/Net".
Objective CamlMySQL Bindings for OBjective CamllibmysqlSee MySQL Bindings for Objective Caml.
OctaveDatabase bindings for GNU OctavelibmysqlSee Database bindings for GNU Octave.
ODBCConnector/ODBClibmysqlSee Section 22.1, "MySQL Connector/ODBC".
PerlDBI/DBD::mysqllibmysqlSee Section 22.10, "MySQL Perl API".
 Net::MySQLNative DriverSee Net::MySQL at CPAN
PHPmysql, ext/mysql interface (deprecated)libmysqlSee Section 22.9.2, "Original MySQL API (Mysql)".
 mysqli, ext/mysqli interfacelibmysqlSee Section 22.9.3, "MySQL Improved Extension (Mysqli)".
 PDO_MYSQLlibmysqlSee Section 22.9.4, "MySQL Functions (PDO_MYSQL) (MySQL (PDO))".
 PDO mysqlndNative Driver 
PythonConnector/PythonNative DriverSee Section 22.6, "MySQL Connector/Python".
 MySQLdblibmysqlSee Section 22.11, "MySQL Python API".
RubyMySQL/RubylibmysqlUses libmysql. See Section 22.12.1, "The MySQL/Ruby API".
 Ruby/MySQLNative DriverSee Section 22.12.2, "The Ruby/MySQL API".
SchemeMyscshlibmysqlSee Myscsh.
SPLsql_mysqllibmysqlSee sql_mysqlfor SPL.
TclMySQLtcllibmysqlSee Section 22.13, "MySQL Tcl API".

Table 22.2. MySQL Connector Versions and MySQL Server Versions

ConnectorConnector versionMySQL Server version
Connector/C++1.0.5 GA5.6, 5.5, 5.4, 5.1
Connector/J5.1.85.6, 5.5, 5.4, 5.1, 5.0, 4.1
Connector/Net6.55.6, 5.5, 5.4, 5.1, 5.0
Connector/Net6.45.6, 5.5, 5.4, 5.1, 5.0
Connector/Net6.35.6, 5.5, 5.4, 5.1, 5.0
Connector/Net6.2 (No longer supported)5.6, 5.5, 5.4, 5.1, 5.0
Connector/Net6.1 (No longer supported)5.6, 5.5, 5.4, 5.1, 5.0
Connector/Net6.0 (No longer supported)5.6, 5.5, 5.4, 5.1, 5.0
Connector/Net5.2 (No longer supported)5.6, 5.5, 5.4, 5.1, 5.0
Connector/Net1.0 (No longer supported)5.0, 4.0
Connector/ODBC5.15.6, 5.5, 5.4, 5.1, 5.0, 4.1.1+
Connector/ODBC3.51 (Unicode not supported)5.6, 5.5, 5.4, 5.1, 5.0, 4.1

22.1. MySQL Connector/ODBC

The MySQL Connector/ODBC is the name for the family of MySQL ODBC drivers (previously called MyODBC drivers) that provide access to a MySQL database using the industry standard Open Database Connectivity (ODBC) API. This reference covers Connector/ODBC 5.2, which includes the functionality of the Unicode driver and the ANSI driver, which formerly were split between Connector/ODBC 5.1 and Connector/ODBC 3.51.

MySQL Connector/ODBC provides both driver-manager based and native interfaces to the MySQL database, with full support for MySQL functionality, including stored procedures, transactions and, with Connector/ODBC 5.1 and higher, full Unicode compliance.

For more information on the ODBC API standard and how to use it, refer to http://support.microsoft.com/kb/110093.

The application development section of the ODBC API reference assumes a good working knowledge of C, general DBMS, and a familiarity with MySQL. For more information about MySQL functionality and its syntax, refer to http://dev.mysql.com/doc/.

Typically, you need to install Connector/ODBC only on Windows machines. For Unix and Mac OS X, you can use the native MySQL network or named pipes to communicate with your MySQL database. You may need Connector/ODBC for Unix or Mac OS X if you have an application that requires an ODBC interface to communicate with the database. Applications that require ODBC to communicate with MySQL include ColdFusion, Microsoft Office, and Filemaker Pro.

Key connector/ODBC topics include:

For release notes detailing the changes in each release of Connector/ODBC, see MySQL Connector/ODBC Release Notes.

22.1.1. Connector/ODBC Versions

These are the versions of Connector/ODBC that are currently available:

  • Connector/ODBC 5.2, currently in GA status, upgrades the ANSI driver of Connector/ODBC 3.51 to the 5.x code base. It also includes new features, such as enabling server-side prepared statements by default. At installation time, you can choose the Unicode driver for the broadest compatibility with data sources using various character sets, or the ANSI driver for optimal performance with a more limited range of character sets. It works with MySQL versions 4.1.1 and higher.

  • Connector/ODBC 5.1, now superceded by 5.2, is a partial rewrite of the of the 3.51 code base, and is designed to work with MySQL versions 4.1.1 and newer.

    Connector/ODBC 5.1 also includes the following changes and improvements over the 3.51 release:

    • Improved support on Windows 64-bit platforms.

    • Full Unicode support at the driver level. This includes support for the SQL_WCHAR data type, and support for Unicode login, password and DSN configurations. For more information, see Microsoft Knowledgebase Article #716246.

    • Support for the SQL_NUMERIC_STRUCT data type, which provides easier access to the precise definition of numeric values. For more information, see Microsoft Knowledgebase Article #714556

    • Native Windows setup library. This replaces the Qt library based interface for configuring DSN information within the ODBC Data Sources application.

    • Support for the ODBC descriptor, which improves the handling and metadata of columns and parameter data. For more information, see Microsoft Knowledgebase Article #716339.

  • Connector/ODBC 3.51 is the current release of the 32-bit ODBC driver, also known as the MySQL ODBC 3.51 driver. Connector/ODBC 3.51 has support for ODBC 3.5x specification level 1 (complete core API + level 2 features) to continue to provide all functionality of ODBC for accessing MySQL.

    With MySQL Connector/ODBC 5.2 now offering both ANSI and Unicode drivers, you should expect to upgrade relatively soon.

The manual for versions of Connector/ODBC older than 5.2 can be located in the corresponding binary or source distribution. Please note that versions of Connector/ODBC earlier than the 3.51 revision were not fully compliant with the ODBC specification.

Note

From this section onward, the primary focus of this guide is the Connector/ODBC 5.2 driver.

Note

Version numbers for MySQL products are formatted as X.X.X. However, Windows tools (Control Panel, properties display) may show the version numbers as XX.XX.XX. For example, the official MySQL formatted version number 5.0.9 may be displayed by Windows tools as 5.00.09. The two versions are the same; only the number display format is different.

22.1.2. Connector/ODBC Introduction

ODBC (Open Database Connectivity) provides a way for client programs to access a wide range of databases or data sources. ODBC is a standardized API that enables connections to SQL database servers. It was developed according to the specifications of the SQL Access Group and defines a set of function calls, error codes, and data types that can be used to develop database-independent applications. ODBC usually is used when database independence or simultaneous access to different data sources is required.

For more information about ODBC, refer to http://support.microsoft.com/kb/110093.

22.1.2.1. General Information About ODBC and Connector/ODBC

Open Database Connectivity (ODBC) is a widely accepted application-programming interface (API) for database access. It is based on the Call-Level Interface (CLI) specifications from X/Open and ISO/IEC for database APIs and uses Structured Query Language (SQL) as its database access language.

A survey of ODBC functions supported by Connector/ODBC is given at Section 22.1.6.1, "Connector/ODBC API Reference". For general information about ODBC, see http://support.microsoft.com/kb/110093.

22.1.2.1.1. Connector/ODBC Architecture

The Connector/ODBC architecture is based on five components, as shown in the following diagram:

Connector/ODBC Architecture
  • Application:

    The Application uses the ODBC API to access the data from the MySQL server. The ODBC API in turn communicates with the Driver Manager. The Application communicates with the Driver Manager using the standard ODBC calls. The Application does not care where the data is stored, how it is stored, or even how the system is configured to access the data. It needs to know only the Data Source Name (DSN).

    A number of tasks are common to all applications, no matter how they use ODBC. These tasks are:

    • Selecting the MySQL server and connecting to it.

    • Submitting SQL statements for execution.

    • Retrieving results (if any).

    • Processing errors.

    • Committing or rolling back the transaction enclosing the SQL statement.

    • Disconnecting from the MySQL server.

    Because most data access work is done with SQL, the primary tasks for applications that use ODBC are submitting SQL statements and retrieving any results generated by those statements.

  • Driver manager:

    The Driver Manager is a library that manages communication between application and driver or drivers. It performs the following tasks:

    • Resolves Data Source Names (DSN). The DSN is a configuration string that identifies a given database driver, database, database host and optionally authentication information that enables an ODBC application to connect to a database using a standardized reference.

      Because the database connectivity information is identified by the DSN, any ODBC compliant application can connect to the data source using the same DSN reference. This eliminates the need to separately configure each application that needs access to a given database; instead you instruct the application to use a pre-configured DSN.

    • Loading and unloading of the driver required to access a specific database as defined within the DSN. For example, if you have configured a DSN that connects to a MySQL database then the driver manager will load the Connector/ODBC driver to enable the ODBC API to communicate with the MySQL host.

    • Processes ODBC function calls or passes them to the driver for processing.

  • Connector/ODBC Driver:

    The Connector/ODBC driver is a library that implements the functions supported by the ODBC API. It processes ODBC function calls, submits SQL requests to MySQL server, and returns results back to the application. If necessary, the driver modifies an application's request so that the request conforms to syntax supported by MySQL.

  • DSN Configuration:

    The ODBC configuration file stores the driver and database information required to connect to the server. It is used by the Driver Manager to determine which driver to be loaded according to the definition in the DSN. The driver uses this to read connection parameters based on the DSN specified. For more information, Section 22.1.4, "Configuring Connector/ODBC".

  • MySQL Server:

    The MySQL database where the information is stored. The database is used as the source of the data (during queries) and the destination for data (during inserts and updates).

22.1.2.1.2. ODBC Driver Managers

An ODBC Driver Manager is a library that manages communication between the ODBC-aware application and any drivers. Its main functionality includes:

  • Resolving Data Source Names (DSN).

  • Driver loading and unloading.

  • Processing ODBC function calls or passing them to the driver.

Both Windows and Mac OS X include ODBC driver managers with the operating system. Most ODBC Driver Manager implementations also include an administration application that makes the configuration of DSN and drivers easier. Examples and information on these managers, including Unix ODBC driver managers, are listed below:

  • Microsoft Windows ODBC Driver Manager (odbc32.dll), http://support.microsoft.com/kb/110093.

  • Mac OS X includes ODBC Administrator, a GUI application that provides a simpler configuration mechanism for the Unix iODBC Driver Manager. You can configure DSN and driver information either through ODBC Administrator or through the iODBC configuration files. This also means that you can test ODBC Administrator configurations using the iodbctest command. http://www.apple.com.

  • unixODBC Driver Manager for Unix (libodbc.so). See http://www.unixodbc.org, for more information. The unixODBC Driver Manager includes the Connector/ODBC driver 3.51 in the installation package, starting with version unixODBC 2.1.2.

  • iODBC ODBC Driver Manager for Unix (libiodbc.so), see http://www.iodbc.org, for more information.

22.1.3. Connector/ODBC Installation

This section explains where to download Connector/ODBC, and how to run the installer, copy the files manually, or build from source.

Where to Get Connector/ODBC

You can get a copy of the latest version of Connector/ODBC binaries and sources from our Web site at http://dev.mysql.com/downloads/connector/odbc/.

For more information about Connector/ODBC, visit http://www.mysql.com/products/myodbc/.

For more information about licensing, visit http://www.mysql.com/company/legal/licensing/.

Choosing Unicode or ANSI Driver

Connector/ODBC offers the flexibility to handle data using any character set through its Unicode-enabled driver, or the maximum raw speed for a more limited range of character sets through its ANSI driver. Some users postponed their upgrade to Connector/ODBC 5.1, remaining with the older 3.51 version to keep this performance edge. As of Connector/ODBC 5.2, both kinds of drivers are available based on the 5.x code base: you can choose either a Unicode-enabled driver or an ANSI driver on the download page. The Unicode-enabled driver, recommended for most users, has no special qualifier in the download filename. The ANSI driver includes -ansi- in the download filename.

Note

You can install either the Unicode driver on a Windows system, or the ANSI driver, or both. The drivers are distinguished in the list of installed software and in the names of libraries and directories by a w (for "wide characters") for the Unicode driver, and a in the ANSI driver.

Choosing Binary or Source Installation Method

You can install the Connector/ODBC drivers using two different methods:

  • The binary installation is the easiest and most straightforward method of installation. You receive all the necessary libraries and other files pre-built, with an installer program or batch script to perform all necessary copying and configuration.

  • The source installation method is intended for platforms where a binary installation package is not available, or in situations where you want to customize or modify the installation process or Connector/ODBC drivers before installation.

    If a binary distribution is not available for a particular platform, and you build the driver from the original source code, you can contribute the binaries you create to MySQL by sending a mail message to <>, so that it becomes available for other users.

Supported Platforms

Connector/ODBC can be used on all major platforms supported by MySQL. You can install it on:

  • Windows 95, 98, Me, NT, 2000, XP, 2003, Vista and 7.

  • All Unix-like Operating Systems, including: AIX, Amiga, BSDI, DEC, FreeBSD, HP-UX 10/11, Linux, NetBSD, OpenBSD, OS/2, SGI Irix, Solaris, SunOS, SCO OpenServer, SCO UnixWare, Tru64 Unix.

  • Mac OS X and Mac OS X Server.

Note

On all non-Windows platforms except Mac OS X, the driver is built against unixODBC and is expecting a 2-byte SQLWCHAR, not 4 bytes as iODBC is using. For this reason, the binaries are only compatible with unixODBC; recompile the driver against iODBC to use them together. For further information, see Section 22.1.2.1.2, "ODBC Driver Managers".

For further instructions, consult the documentation corresponding to the platform where you are installing and whether you are running a binary installer or building from source:

22.1.3.1. Installing Connector/ODBCon Windows

Before installing the Connector/ODBC drivers on Windows, ensure that your Microsoft Data Access Components (MDAC) are up to date. You can obtain the latest version from the Microsoft Data Access and Storage Web site.

There are different distribution types to use when installing for Windows. The software that is installed is identical in each case, only the installation method is different.

Note

An OLEDB/ODBC driver for Windows 64-bit is available from Microsoft Downloads.

22.1.3.1.1. Installing the Windows Connector/ODBC Driver Using an Installer

The zipped or MSI installer packages offer a very simple method for installing the Connector/ODBC drivers. If you have downloaded the zipped installer, extract the installer application. The basic installation process is identical for both installers.

Follow these steps to complete the installation:

  1. Double-click the standalone installer that you extracted, or the MSI file you downloaded.

  2. The MySQL Connector/ODBC Setup Wizard starts. Click the Next button to begin the installation process.

    Connector/ODBC Windows Installer - Welcome
  3. Choose the installation type. The Typical installation provides the standard files needed to connect to a MySQL database using ODBC. The Complete option installs all the available files, including debug and utility components. Oracle recommends choosing one of these two options to complete the installation. If you choose one of these methods, click Next, then proceed to step 5.

    You can also choose a Custom installation, where you select the individual components to install. If you choose this method, click Next, then proceed to step 4.

    Connector/ODBC Windows Installer - Choosing a Setup type welcome
  4. If you have chosen a custom installation, use the pop-ups to select which components to install, then click Next to install the necessary files.

    Connector/ODBC Windows Installer - Custom Installation welcome
  5. Once the files are copied to their final locations, the installation is complete. Click Finish to exit the installer.

    Connector/ODBC Windows Installer - Completion welcome

Now that the installation is complete, configure your ODBC connections using Section 22.1.4, "Configuring Connector/ODBC".

22.1.3.1.2. Installing the Windows Connector/ODBC Driver using the Zipped DLLPackage

If you have downloaded the zipped DLL package:

  1. Unzip the installation files.

  2. Run the included batch file to perform an installation to the default locations.

  3. Alternatively, install the individual files required for Connector/ODBC operation manually.

Note

The following instructions only work for 32-bit Windows systems. If you have a 64-bit Windows system, use the MSI installer, which installs both the 32-bit and 64-bit drivers to the correct locations.

To install using the batch file:

  1. Unzip the Connector/ODBC zipped DLL package.

  2. Open a command prompt.

  3. Change to the directory created when you unzipped the Connector/ODBC zipped DLL package.

  4. Run Install.bat:

    C:\> Install.bat

    This copies the necessary files into the default location, and then registers the Connector/ODBC driver with the Windows ODBC manager.

Note

Changing or adding a new DSN (data source name) may be accomplished using either the GUI, or from the command-line using myodbc-installer.exe with Connector/ODBC 5.x, or myodbc3i.exe with Connector/ODBC 3.51,

Although Oracle recommends installing these files in the standard location, you can also copy the files by hand to an alternative location - for example, to run or test different versions of the Connector/ODBC driver on the same machine. To copy the files to a location of your choice, use the following steps:

  1. Unzip the Connector/ODBC zipped DLL package.

  2. Open a command prompt.

  3. Change to the directory created when you unzipped the Connector/ODBC zipped DLL package.

  4. Copy the library files to a suitable directory. The default location is the default Windows system directory \Windows\System32:

    C:\> copy lib\myodbc5S.dll \Windows\System32C:\> copy lib\myodbc5S.lib \Windows\System32If installing the Unicode-enabled driver:C:\> copy lib\myodbc5w.dll \Windows\System32C:\> copy lib\myodbc5w.lib \Windows\System32If installing the ANSI driver:C:\> copy lib\myodbc5a.dll \Windows\System32C:\> copy lib\myodbc5a.lib \Windows\System32
  5. Copy the Connector/ODBC tools. These must be placed in a directory that is in the system %PATH%. The default is to install these into the Windows system directory \Windows\System32:

    C:\> copy bin\myodbc3i.exe \Windows\System32C:\> copy bin\myodbc3m.exe \Windows\System32C:\> copy bin\myodbc3c.exe \Windows\System32
  6. Optionally, copy the help files. For these files to be accessible through the help system, they must be installed in the Windows system directory:

    C:\> copy doc\*.hlp \Windows\System32
  7. Finally, register the Connector/ODBC driver with the ODBC manager:

    For Unicode-enabled driver:C:\> myodbc3i -a -d -t"MySQL ODBC 5.2 Driver;\  DRIVER=myodbc5w.dll;SETUP=myodbc5S.dll"For ANSI driver:C:\> myodbc3i -a -d -t"MySQL ODBC 5.2 Driver;\  DRIVER=myodbc5a.dll;SETUP=myodbc5S.dll"

    If you installed these files into a non-default location, change the references to the DLL files and command location in the above statement

22.1.3.2. Installing Connector/ODBCon Unix

There are two methods available for installing Connector/ODBC on Unix from a binary distribution. For most Unix environments, you will use the tarball distribution. For Linux systems, there is also an RPM distribution available.

Note

To install Connector/ODBC 5.x on Unix requires unixODBC 2.2.12 or later to be installed.

22.1.3.2.1. Installing Connector/ODBC from a Binary Tarball Distribution

To install the driver from a tarball distribution (.tar.gz file), download the latest version of the driver for your operating system and follow these steps that demonstrate the process using the Linux version of the tarball, substituting the appropriate file and directory names based on the package you download:

shell> su rootshell> gunzip mysql-connector-odbc-5.2.2-i686-pc-linux.tar.gzshell> tar xvf mysql-connector-odbc-5.2.2-i686-pc-linux.tarshell> cd mysql-connector-odbc-5.2.2-i686-pc-linux

Read the installation instructions in the INSTALL file and execute these commands.

Then see Section 22.1.4.5, "Configuring a Connector/ODBC DSN on Unix" to configure the DSN for Connector/ODBC. For more information, refer to the INSTALL file that comes with your distribution.

22.1.3.2.2. Installing Connector/ODBC from an RPM Distribution

To install or upgrade Connector/ODBC from an RPM distribution on Linux, simply download the RPM distribution of the latest version of Connector/ODBC and follow the instructions below. Use su root to become root, then install the RPM file.

If you are installing for the first time:

shell> su rootshell> rpm -ivh mysql-connector-odbc-5.2.2.i386.rpm

If the driver exists, upgrade it like this:

shell> su rootshell> rpm -Uvh mysql-connector-odbc-5.2.2.i386.rpm

If there is any dependency error for MySQL client library, libmysqlclient, simply ignore it by supplying the --nodeps option, and then make sure the MySQL client shared library is in the path or set through LD_LIBRARY_PATH.

This installs the driver libraries and related documents to /usr/local/lib and /usr/share/doc/MyODBC, respectively. See Section 22.1.4.5, "Configuring a Connector/ODBC DSN on Unix" for the post-installation configuration steps.

To uninstall the driver, become root and execute an rpm command:

shell> su rootshell> rpm -e mysql-connector-odbc

22.1.3.3. Installing Connector/ODBCon Mac OS X

Mac OS X is based on the FreeBSD operating system, and you can normally use the MySQL network port for connecting to MySQL servers on other hosts. Installing the Connector/ODBC driver lets you connect to MySQL databases on any platform through the ODBC interface. If your application requires an ODBC interface, install the Connector/ODBC driver. Applications that require or can use ODBC (and therefore the Connector/ODBC driver) include ColdFusion, Filemaker Pro, 4th Dimension and many other applications.

Mac OS X includes its own ODBC manager, based on the iODBC manager. Mac OS X includes an administration tool that provides easier administration of ODBC drivers and configuration, updating the underlying iODBC configuration files.

For Connector/ODBC 5.x, the package is provided as a compressed tar archive that you manually install.

In either case, the driver is designed to work with the iODBC driver manager included with Mac OS X.

To install Connector/ODBC 5.x:

  1. Download the installation file for the appropriate level of OS X (10.5 or higher).

  2. Extract the archive:

    shell> tar xvzf mysql-connector-odbc-5.x.y-osx10.z-x86-(32|64)bit.tar.gz
  3. The directory created contains the subdirectories, lib, bin, and test. Copy the contents of lib and bin to a suitable location such as /usr/local:

    shell> sudo cp bin/* /usr/local/binshell> sudo cp lib/* /usr/local/lib
  4. Finally, register the driver with iODBC using the myodbc3i tool you just installed:

    shell> myodbc3i -a -d -t"MySQL ODBC 3.51 Driver;Driver=/usr/local/lib/libmyodbc3.so;  Setup=/usr/local/lib/libmyodbc3S.so"

To verify the installed drivers, either use the ODBC Administrator application or the myodbc3i utility:

shell> myodbc3i -q -d

22.1.3.4. Building Connector/ODBC from a Source Distribution on Windows

You only need to build Connector/ODBC from source on Windows to modify the source or installation location. If you are unsure whether to install from source, please use the binary installation detailed in Section 22.1.3.1, "Installing Connector/ODBC on Windows".

Building Connector/ODBC from source on Windows requires a number of different tools and packages:

  • MDAC, Microsoft Data Access SDK from http://support.microsoft.com/kb/110093.

  • Suitable C compiler, such as Microsoft Visual C++ or the C compiler included with Microsoft Visual Studio.

    Microsoft Visual Studio 7 and 8 are preferred, and well-tested.

  • Connector/ODBC 5.2: cmake.

  • MySQL client libraries and include files from MySQL 4.0.0 or higher. (Preferably MySQL 4.0.16 or higher). This is required because Connector/ODBC uses calls and structures that exist only starting from this version of the library. To get the client libraries and include files, visit http://dev.mysql.com/downloads/.

Build Steps

Set the environment variables for the Visual Studio toolchain. Visual Studio includes a batch file to set these for you, and installs a Start menu shortcut that opens a command prompt with these variables set.

Set MYSQL_DIR to the MySQL server installation path, while using the short-style file names. For example:

C:\> set MYSQL_DIR=C:\PROGRA~1\MySQL\MYSQLS~1.0

Build Connector/ODBC using the cmake command-line tool by executing the following from the source root directory (in a command prompt window):

C:\> cmake -G "Visual Studio 8 2005"

This produces a project file that you can open with Visual Studio, or build from the command line with either of the following commands:

C:\> devenv.com MySQL_Connector_ODBC.sln /build ReleaseC:\> devenv.com MySQL_Connector_ODBC.sln /build RelWithDebInfo

To compile a debug build, set the cmake build type so that the correct versions of the MySQL client libraries are used:

C:\> cmake -G "Visual Studio 8 2005" -DCMAKE_BUILD_TYPE=DebugC:\> devenv.com MySQL_Connector_ODBC.sln /build Debug

Upon completion, the executables are in the bin/ and lib/ subdirectories.

See Section 22.1.3.1.2, "Installing the Windows Connector/ODBC Driver using the Zipped DLL Package" for the copy commands to complete the installation.

22.1.3.5. Building Connector/ODBC from a Source Distribution on Unix

Note

Connector/5.2 uses cmake for build, rather than autoconf and its configure command.

You need the following tools to build MySQL from source on Unix:

  • A working ANSI C++ compiler. GCC 4.2.1 or later, Sun Studio 10 or later, Visual Studio 2008 or later, and many current vendor-supplied compilers are known to work.

  • cmake.

  • MySQL client libraries and include files from MySQL 4.0.0 or higher. (Preferably MySQL 4.0.16 or higher). This is required because Connector/ODBC uses calls and structures that exist only starting from this version of the library. To get the client libraries and include files, visit http://dev.mysql.com/downloads/.

    If you have built your own MySQL server or client libraries from source using the GNU autotools, use the --enable-thread-safe-client option to configure when the libraries were built. No special option is needed if you configure with cmake.

    Also, ensure that the libmysqlclient library was built and installed as a shared library.

  • A compatible ODBC manager must be installed. Connector/ODBC is known to work with the iODBC and unixODBC managers. See Section 22.1.2.1.2, "ODBC Driver Managers" for more information.

  • If you are using a character set that is not compiled into the MySQL client library, install the MySQL character definitions from the charsets directory into SHAREDIR (by default, /usr/local/mysql/share/mysql/charsets). These should be in place if you have installed the MySQL server on the same machine. See Section 10.1, "Character Set Support" for more information on character set support.

Once you have all the required files, unpack the source files to a separate directory, then run configure and build the library using make.

Typical cmake Options

iODBC is the default ODBC library used by Connector/ODBC. Alternatively, unixODBC may be used by passing in the appropriate option to cmake. For example:

shell> cmake -G "Unix Makefiles" -DWITH_UNIXODBC=1

When you run cmake, you might add options to the command line. Here are some examples:

Additional configure Options

There are a number of other options that you need, or want, to set when configuring the Connector/ODBC driver before it is built.

  • To link the driver with MySQL thread safe client libraries libmysqlclient_r.so or libmysqlclient_r.a, specify the following configure option:

    --enable-thread-safe

    and can be disabled (default) using

    --disable-thread-safe

    This option enables the building of the driver thread-safe library libmyodbc3_r.so from by linking with MySQL thread-safe client library libmysqlclient_r.so. (The extensions are OS-dependent.)

    If the compilation with the thread-safe option fails, it may be because the correct thread-libraries on the system could not be located. Set the value of LIBS to point to the correct thread library for your system.

    LIBS="-lpthread" ./configure ..
  • You can enable or disable the shared and static versions of Connector/ODBC using these options:

    --enable-shared[=yes|no]--disable-shared--enable-static[=yes|no]--disable-static
  • By default, all the binary distributions are built as non-debug versions (configured with --without-debug).

    To enable debugging information, build the driver from a source distribution with the proper configuration option to enable debugging support. See Section 2.10.4, "MySQL Source-Configuration Options".

  • This option is available only for source trees that have been obtained from the Subversion repository. This option does not apply to the packaged source distributions.

    By default, the driver is built with the --without-docs option. If you would like the documentation to be built, then execute configure with:

    --with-docs
Build Steps for Unix

To build the driver libraries, execute make:

shell> make

If any errors occur, correct them and continue the build process. If you are not able to build, then send a detailed email to <> for further assistance.

Building Shared Libraries

On most platforms, MySQL does not build or support .so (shared) client libraries by default. This is based on our experience of problems when building shared libraries.

In cases like this, you have to download the MySQL distribution and configure it with these options:

--without-server --enable-shared

To build shared driver libraries, specify the --enable-shared option for configure. By default, configure does not enable this option.

If you have configured with the --disable-shared option, you can build the .so file from the static libraries using the following commands:

shell> cd mysql-connector-odbc-3.51.01shell> makeshell> cd drivershell> CC=/usr/bin/gcc \  $CC -bundle -flat_namespace -undefined error \  -o .libs/libmyodbc3-3.51.01.so \  catalog.o connect.o cursor.o dll.o error.o execute.o \  handle.o info.o misc.o myodbc3.o options.o prepare.o \  results.o transact.o utility.o \  -L/usr/local/mysql/lib/mysql/ \  -L/usr/local/iodbc/lib/ \  -lz -lc -lmysqlclient -liodbcinst

Make sure to change -liodbcinst to -lodbcinst if you are using unixODBC instead of iODBC, and configure the library paths accordingly.

This builds and places the libmyodbc3-3.51.01.so file in the .libs directory. Copy this file to the Connector/ODBC library installation directory (/usr/local/lib, or the lib directory under the installation directory that you supplied with the --prefix option).

shell> cd .libsshell> cp libmyodbc3-3.51.01.so /usr/local/libshell> cd /usr/local/libshell> ln -s libmyodbc3-3.51.01.so libmyodbc3.so

To build the thread-safe driver library:

shell> CC=/usr/bin/gcc \  $CC -bundle -flat_namespace -undefined error  -o .libs/libmyodbc3_r-3.51.01.so  catalog.o connect.o cursor.o dll.o error.o execute.o  handle.o info.o misc.o myodbc3.o options.o prepare.o  results.o transact.o utility.o  -L/usr/local/mysql/lib/mysql/  -L/usr/local/iodbc/lib/  -lz -lc -lmysqlclient_r -liodbcinst
Installing Driver Libraries

To install the driver libraries, execute the following command:

shell> make install

That command installs one of the following sets of libraries:

For Connector/ODBC 3.51:

  • libmyodbc3.so

  • libmyodbc3-3.51.01.so, where 3.51.01 is the version of the driver

  • libmyodbc3.a

For thread-safe Connector/ODBC 3.51:

  • libmyodbc3_r.so

  • libmyodbc3-3_r.51.01.so

  • libmyodbc3_r.a

For more information on build process, refer to the INSTALL file that comes with the source distribution. Note that if you are trying to use the make from Sun, you may end up with errors. On the other hand, GNU gmake should work fine on all platforms.

Testing Connector/ODBC on Unix

To run the basic samples provided in the distribution with the libraries that you built, use the following command:

shell> make test

Before running the tests, create the DSN 'myodbc3' in odbc.ini and set the environment variable ODBCINI to the correct odbc.ini file; and MySQL server is running. You can find a sample odbc.ini with the driver distribution.

You can even modify the samples/run-samples script to pass the desired DSN, UID, and PASSWORD values as the command-line arguments to each sample.

22.1.3.6. Building Connector/ODBC from Source on Mac OS X

To build the driver on Mac OS X (Darwin), make use of the following configure example:

shell> ./configure --prefix=/usr/local  --with-unixODBC=/usr/local  --with-mysql-path=/usr/local/mysql  --disable-shared  --enable-gui=no  --host=powerpc-apple

The command assumes that the unixODBC and MySQL are installed in the default locations. If not, configure accordingly.

On Mac OS X, --enable-shared builds .dylib files by default. You can build .so files like this:

shell> makeshell> cd drivershell> CC=/usr/bin/gcc \  $CC -bundle -flat_namespace -undefined error  -o .libs/libmyodbc3-3.51.01.so *.o  -L/usr/local/mysql/lib/  -L/usr/local/iodbc/lib  -liodbcinst -lmysqlclient -lz -lc

To build the thread-safe driver library:

shell> CC=/usr/bin/gcc \  $CC -bundle -flat_namespace -undefined error  -o .libs/libmyodbc3-3.51.01.so *.o  -L/usr/local/mysql/lib/  -L/usr/local/iodbc/lib  -liodbcinst -lmysqlclienti_r -lz -lc -lpthread

Make sure to change the -liodbcinst to -lodbcinst in case of using unixODBC instead of iODBC and configure the libraries path accordingly.

In Apple's version of GCC, both cc and gcc are actually symbolic links to gcc3.

Copy this library to the $prefix/lib directory and symlink to libmyodbc3.so.

You can cross-check the output shared-library properties using this command:

shell> otool -LD .libs/libmyodbc3-3.51.01.so

22.1.3.7. Installing Connector/ODBC from the Development Source Tree

Caution

Read this section only if you are interested in helping us test our new code. To just get MySQL Connector/ODBC up and running on your system, use a standard release distribution.

To obtain the most recent development source tree, first download and install Bazaar from the Bazaar VCS Web site. Bazaar is supported by any platform that supports Python, and is therefore compatible with any Linux, Unix, Windows or Mac OS X host. Instructions for downloading and installing Bazaar on the different platforms are available on the Bazaar Web site.

Building from the source trees requires the following tools:

  • autoconf 2.52 (or newer).

  • automake 1.4 (or newer).

  • libtool 1.4 (or newer).

  • m4.

The most recent development source tree is available from our public Subversion trees at http://dev.mysql.com/tech-resources/sources.html.

To check out out the Connector/ODBC sources, change to the directory where you want the copy of the Connector/ODBC tree to be stored, then use the following command:

shell> bzr branch lp:myodbc

You should now have a copy of the entire Connector/ODBC source tree in the directory connector-odbc3. To build from this source tree on Unix or Linux, follow these steps:

shell> cd myodbcshell> aclocalshell> autoheadershell> libtoolize -c -fshell> autoconfshell> automake;shell> ./configure  # Add your favorite options hereshell> make

When the build is done, run make install to install the Connector/ODBC driver on your system.

If you have gotten to the make stage and the distribution does not compile, please report it to <>.

On Windows, make use of Windows Makefiles WIN-Makefile and WIN-Makefile_debug in building the driver. For more information, see Section 22.1.3.4, "Building Connector/ODBC from a Source Distribution on Windows".

After the initial checkout operation to get the source tree, run bzr pull periodically to update your source according to the latest version.

22.1.4. Configuring Connector/ODBC

Before you connect to a MySQL database using the Connector/ODBC driver, you configure an ODBC Data Source Name (DSN). The DSN associates the various configuration parameters required to communicate with a database to a specific name. You use the DSN in an application to communicate with the database, rather than specifying individual parameters within the application itself. DSN information can be user-specific, system-specific, or provided in a special file. ODBC data source names are configured in different ways, depending on your platform and ODBC driver.

22.1.4.1. Overview of Connector/ODBC Data Source Names

A Data Source Name associates the configuration parameters for communicating with a specific database. Generally, a DSN consists of the following parameters:

  • Name
  • Host Name
  • Database Name
  • Login
  • Password

In addition, different ODBC drivers, including Connector/ODBC, may accept additional driver-specific options and parameters.

There are three types of DSN:

  • A System DSN is a global DSN definition that is available to any user and application on a particular system. A System DSN can normally only be configured by a systems administrator, or by a user who has specific permissions that let them create System DSNs.

  • A User DSN is specific to an individual user, and can be used to store database connectivity information that the user regularly uses.

  • A File DSN uses a simple file to define the DSN configuration. File DSNs can be shared between users and machines and are therefore more practical when installing or deploying DSN information as part of an application across many machines.

DSN information is stored in different locations depending on your platform and environment.

22.1.4.2. Connector/ODBC Connection Parameters

You can specify the parameters in the following tables for Connector/ODBC when configuring a DSN:

Users on Windows can use the Options and Advanced panels when configuring a DSN to set these parameters; see the table for information on which options relate to which fields and check boxes. On Unix and Mac OS X, use the parameter name and value as the keyword/value pair in the DSN configuration. Alternatively, you can set these parameters within the InConnectionString argument in the SQLDriverConnect() call.

Table 22.3. Connector/ODBC DSN Configuration Options

ParameterDefault ValueComment
userODBCThe user name used to connect to MySQL.
uidODBCSynonymous with user. Added in 3.51.16.
serverlocalhostThe host name of the MySQL server.
database The default database.
option0Options that specify how Connector/ODBC works. See Table 22.4, "Connector/ODBC Option Flags" and Table 22.5, "Recommended Connector/ODBC option Values for Different Configurations".
port3306The TCP/IP port to use if server is not localhost.
initstmt Initial statement. A statement to execute when connecting to MySQL. In version 3.51 the parameter is called stmt. Note, the driver supports the initial statement being executed only at the time of the initial connection.
password The password for the user account on server.
pwd Synonymous with password. Added in 3.51.16.
socket The Unix socket file or Windows named pipe to connect to if server is localhost.
sslca The path to a file with a list of trust SSL CAs. Added in 3.51.16.
sslcapath The path to a directory that contains trusted SSL CA certificates in PEM format. Added in 3.51.16.
sslcert The name of the SSL certificate file to use for establishing a secure connection. Added in 3.51.16.
sslcipher A list of permissible ciphers to use for SSL encryption. The cipher list has the same format as the openssl ciphers command. Added in 3.51.16.
sslkey The name of the SSL key file to use for establishing a secure connection. Added in 3.51.16.
charset The character set to use for the connection. Added in 3.51.17.
sslverify If set to 1, the SSL certificate will be verified when used with the MySQL connection. If not set, then the default behavior is to ignore SSL certificate verification.
readtimeout The timeout in seconds for attempts to read from the server. Each attempt uses this timeout value and there are retries if necessary, so the total effective timeout value is three times the option value. You can set the value so that a lost connection can be detected earlier than the TCP/IP Close_Wait_Timeout value of 10 minutes. This option works only for TCP/IP connections, and only for Windows prior to MySQL 5.1.12. Corresponds to the MYSQL_OPT_READ_TIMEOUT option of the MySQL Client Library. This option was added in Connector/ODBC 3.51.27.
writetimeout The timeout in seconds for attempts to write to the server. Each attempt uses this timeout value and there are net_retry_count retries if necessary, so the total effective timeout value is net_retry_count times the option value. This option works only for TCP/IP connections, and only for Windows prior to MySQL 5.1.12. Corresponds to the MYSQL_OPT_WRITE_TIMEOUT option of the MySQL Client Library. This option was added in Connector/ODBC 3.51.27.
interactive Enables the CLIENT_INTERACTIVE connection option of mysql_real_connect.
prefetch0

When set to a non-zero value N, causes all queries in the connection to return N rows at a time rather than the entire result set. Useful for queries against very large tables where it is not practical to retrieve the whole result set at once. You can scroll through the result set, N records at a time.

This option works only with forward-only cursors. It does not work when the FLAG_MULTI_STATEMENTS flag is set. It can be used in combination with the FLAG_NO_CACHE option. Its behavior in ADO applications is undefined: the prefetching might or might not occur.

no_ssps0

In Connector/ODBC 5.2, by default, server-side prepared statements are used. When this option is set to a non-zero value, prepared statements are emulated on the client side, which is the same behavior as in 5.1 and 3.51. Added in 5.2.


Note

The SSL configuration parameters can also be automatically loaded from a my.ini or my.cnf file. See Section 4.2.3.3, "Using Option Files".

The option argument is used to tell Connector/ODBC that the client is not 100% ODBC-compliant. On Windows, you normally select options by toggling the check boxes in the connection screen, but you can also select them in the option argument. The following options are listed in the order in which they appear in the Connector/ODBC connect screen.

Table 22.4. Connector/ODBC Option Flags

Flag NameGUI OptionConstant ValueDescription
FLAG_FIELD_LENGTHDo not Optimize Column Width The client cannot handle that Connector/ODBC returns the real width of a column. This option was removed in 3.51.18.
FLAG_FOUND_ROWSReturn Matching Rows2The client cannot handle that MySQL returns the true value of affected rows. If this flag is set, MySQL returns "found rows" instead. You must have MySQL 3.21.14 or newer for this to work.
FLAG_DEBUGTrace Driver Calls To myodbc.log Make a debug log in C:\myodbc.log on Windows, or /tmp/myodbc.log on Unix variants. This option was removed in Connector/ODBC 3.51.18.
FLAG_BIG_PACKETSAllow Big Results8Do not set any packet limit for results and bind parameters. Without this option, parameter binding will be truncated to 255 characters.
FLAG_NO_PROMPTDo not Prompt Upon Connect16Do not prompt for questions even if driver would like to prompt.
FLAG_DYNAMIC_CURSOREnable Dynamic Cursor32Enable or disable the dynamic cursor support.
FLAG_NO_SCHEMAIgnore # in Table Name64Ignore use of database name in db_name.tbl_name.col_name.
FLAG_NO_DEFAULT_CURSORUser Manager Cursors128Force use of ODBC manager cursors (experimental).
FLAG_NO_LOCALEDo not Use Set Locale256Disable the use of extended fetch (experimental).
FLAG_PAD_SPACEPad Char To Full Length512Pad CHAR columns to full column length.
FLAG_FULL_COLUMN_NAMESReturn Table Names for SQLDescribeCol1024SQLDescribeCol() returns fully qualified column names.
FLAG_COMPRESSED_PROTOUse Compressed Protocol2048Use the compressed client/server protocol.
FLAG_IGNORE_SPACEIgnore Space After Function Names4096Tell server to ignore space after function name and before "(" (needed by PowerBuilder). This makes all function names keywords.
FLAG_NAMED_PIPEForce Use of Named Pipes8192Connect with named pipes to a mysqld server running on NT.
FLAG_NO_BIGINTChange BIGINT Columns to Int16384Change BIGINT columns to INT columns (some applications cannot handle BIGINT).
FLAG_NO_CATALOGNo Catalog32768Forces results from the catalog functions, such as SQLTables, to always return NULL and the driver to report that catalogs are not supported.
FLAG_USE_MYCNFRead Options From my.cnf65536Read parameters from the [client] and [odbc] groups from my.cnf.
FLAG_SAFESafe131072Add some extra safety checks.
FLAG_NO_TRANSACTIONSDisable transactions262144Disable transactions.
FLAG_LOG_QUERYSave queries to myodbc.sql524288Enable query logging to c:\myodbc.sql(/tmp/myodbc.sql) file. (Enabled only in debug mode.)
FLAG_NO_CACHEDo not Cache Result (forward only cursors)1048576Do not cache the results locally in the driver, instead read from server (mysql_use_result()). This works only for forward-only cursors. This option is very important in dealing with large tables when you do not want the driver to cache the entire result set.
FLAG_FORWARD_CURSORForce Use Of Forward Only Cursors2097152Force the use of Forward-only cursor type. In case of applications setting the default static/dynamic cursor type, and one wants the driver to use noncache result sets, then this option ensures the forward-only cursor behavior.
FLAG_AUTO_RECONNECTEnable auto-reconnect.4194304Enables auto-reconnection functionality. Do not use this option with transactions, since an auto-reconnection during a incomplete transaction may cause corruption. Note that an auto-reconnected connection will not inherit the same settings and environment as the original. This option was added in Connector/ODBC 3.51.13.
FLAG_AUTO_IS_NULLFlag Auto Is Null8388608

When FLAG_AUTO_IS_NULL is set, the driver does not change the default value of sql_auto_is_null, leaving it at 1, so you get the MySQL default, not the SQL standard behavior.

When FLAG_AUTO_IS_NULL is not set, the driver changes the default value of SQL_AUTO_IS_NULL to 0 after connecting, so you get the SQL standard, not the MySQL default behavior.

Thus, omitting the flag disables the compatibility option and forces SQL standard behavior.

See IS NULL. This option was added in Connector/ODBC 3.51.13.

FLAG_ZERO_DATE_TO_MINReturn SQL_NULL_DATA for zero date16777216Translates zero dates (XXXX-00-00) into the minimum date values supported by ODBC, XXXX-01-01. This resolves an issue where some statements will not work because the date returned and the minimum ODBC date value are incompatible. This option was added in Connector/ODBC 3.51.17.
FLAG_MIN_DATE_TO_ZEROBind minimal date as zero date33554432Translates the minimum ODBC date value (XXXX-01-01) to the zero date format supported by MySQL (XXXX-00-00). This resolves an issue where some statements will not work because the date returned and the minimum ODBC date value are incompatible. This option was added in Connector/ODBC 3.51.17.
FLAG_MULTI_STATEMENTSAllow multiple statements67108864Enables support for batched statements. This option was added in Connector/ODBC 3.51.18.
FLAG_COLUMN_SIZE_S32Limit column size to 32-bit value134217728Limits the column size to a signed 32-bit value to prevent problems with larger column sizes in applications that do not support them. This option is automatically enabled when working with ADO applications. This option was added in Connector/ODBC 3.51.22.
FLAG_NO_BINARY_RESULTAlways handle binary function results as character data268435456When set this option disables charset 63 for columns with an empty org_table. This option was added in Connector/ODBC 3.51.26.
FLAG_DFLT_BIGINT_BIND_STR 536870912Causes BIGINT parameters to be bound as strings. Microsoft Access treats BIGINT as a string on linked tables. The value is read correctly, but bound as a string. This option is used automatically if the driver is used by Microsoft Access.
FLAG_NO_INFORMATION_SCHEMA 1073741824Tells catalog functions not to use INFORMATION_SCHEMA, but rather use legacy algorithms. The trade-off here is usually speed for information quality. Using INFORMATION_SCHEMA is often slow, butthe information obtained is more complete.

To select multiple options, add together their values, using the numbers from the Constant Value column in the table.

Note

In MySQL Connector/ODBC 5.2, you can use the flag name directly as a parameter in the connection string, by specifying the flag name without the FLAG_ prefix. So, in addition to using the options parameter with various flags set, you can use the flags directly as parameters. For example, FIELD_LENGTH, FOUND_ROWS and DEBUG could all be used as parameters.

The following table shows some recommended option values for various configurations:

Table 22.5. Recommended Connector/ODBC option Values for Different Configurations

ConfigurationOption Value
Microsoft Access, Visual Basic3
Driver trace generation (Debug mode)4
Microsoft Access (with improved DELETE queries)35
Large tables with too many rows2049
Sybase PowerBuilder135168
Query log generation (Debug mode)524288
Generate driver trace as well as query log (Debug mode)524292
Large tables with no-cache results3145731

22.1.4.3. Configuring a Connector/ODBC DSN on Windows

The ODBC Data Source Administrator within Windows lets you create DSNs, check driver installation and configure ODBC systems such as tracing (used for debugging) and connection pooling.

Different editions and versions of Windows store the ODBC Data Source Administrator in different locations depending on the version of Windows that you are using.

To open the ODBC Data Source Administrator in Windows Server 2003:

Tip

To identify whether a DSN was created using the 32-bit or the 64-bit driver, include the driver being used within the DSN identifier. This will help you to identify the right DSN to use with applications such as Excel that are only compatible with the 32-bit driver. For example, you might add Using32bitCODBC to the DSN identifier for the 32-bit interface and Using64bitCODBC for those using the 64-bit Connector/ODBC driver.

  1. On the Start menu, choose Administrative Tools, and then click Data Sources (ODBC).

To open the ODBC Data Source Administrator in Windows 2000 Server or Windows 2000 Professional:

  1. On the Start menu, choose Settings, and then click Control Panel.

  2. In Control Panel, click Administrative Tools.

  3. In Administrative Tools, click Data Sources (ODBC).

To open the ODBC Data Source Administrator on Windows XP:

  1. On the Start menu, click Control Panel.

  2. In the Control Panel when in Category View click Performance and Maintenance and then click Administrative Tools.. If you are viewing the Control Panel in Classic View, click Administrative Tools.

  3. In Administrative Tools, click Data Sources (ODBC).

Irrespective of your Windows version, you should be presented the ODBC Data Source Administrator window:

ODBC Data Source Administrator Dialog

Within Windows XP, you can add the Administrative Tools folder to your Start menu to make it easier to locate the ODBC Data Source Administrator. To do this:

  1. Right-click the Start menu.

  2. Select Properties.

  3. Click Customize....

  4. Select the Advanced tab.

  5. Within Start menu items, within the System Administrative Tools section, select Display on the All Programs menu.

Within both Windows Server 2003 and Windows XP, consider permanently adding the ODBC Data Source Administrator to your Start menu. To do this, locate the Data Sources (ODBC) icon using the methods shown, then right-click on the icon and then choose Pin to Start Menu.

The interfaces for the 3.51 and 5.x versions of the Connector/ODBC driver are different, although the fields and information that you need to enter remain the same.

To configure a DSN using Connector/ODBC 5.2, see Section 22.1.4.3.1, "Configuring a Connector/ODBC 5.x DSN on Windows".

22.1.4.3.1. Configuring a Connector/ODBC 5.x DSN on Windows

Due to the native Unicode support within Connector/ODBC, you do not need to specify the initial character set to be used with your connection.

To add or configure a Connector/ODBC 5.x DSN on Windows, use either the command-line, or the ODBC Data Source Administrator GUI.

  1. Open the ODBC Data Source Administrator.

  2. To create a System DSN (which will be available to all users), select the System DSN tab. To create a User DSN, which will be unique only to the current user, click the Add... button.

  3. Select the ODBC driver for this DSN.

    MySQL ODBC Driver Selection Dialog

    Select MySQL ODBC 5.x Driver for the appropriate level of Connector/ODBC, then click Finish.

  4. You now need to configure the specific fields for the DSN you are creating through the Connection Parameters dialog.

    Add Data Source Name Dialog for Connector/ODBC 5.2

    In the Data Source Name box, enter the name of the data source to access. It can be any valid name that you choose.

  5. In the Description box, enter some text to help identify the connection.

  6. In the Server field, enter the name of the MySQL server host to access. By default, it is localhost.

  7. In the User field, enter the user name to use for this connection.

  8. In the Password field, enter the corresponding password for this connection.

  9. The Database pop-up should automatically populate with the list of databases that the user has permissions to access.

  10. To communicate over a different TCP/IP port than the default (3306), change the value of the Port.

  11. Click OK to save the DSN.

To verify the connection using the parameters you have entered, click the Test button. If the connection could be made successfully, you will be notified with a Success; connection was made! dialog.

You can configure a number of options for a specific DSN by using the Details button.

Connector/ODBC Connect Options Dialog

The Details button opens a tabbed display where you set additional options:

  • Flags 1, Flags 2, and Flags 3 enable you to select the additional flags for the DSN connection. For more information on these flags, see Section 22.1.4.2, "Connector/ODBC Connection Parameters".

  • Debug lets you turn on ODBC debugging to record the queries you execute through the DSN to the myodbc.sql file. For more information, see Section 22.1.4.8, "Getting an ODBC Trace File".

  • SSL Settings configures the additional options required for using the Secure Sockets Layer (SSL) when communicating with MySQL server. Note that you must also enable SSL and configure the MySQL server with suitable certificates to communicate over SSL.

    Connector/ODBC 5.2 SSL Configuration

The Advanced tab lets you configure Connector/ODBC connection parameters. Refer to Section 22.1.4.2, "Connector/ODBC Connection Parameters", for information about the meaning of these options.

22.1.4.3.2. Configuring a Connector/ODBC 5.x DSN on Windows, Using the Command Line

Use myodbc-installer.exe when configuring Connector/ODBC 5.1 or later from the command-line.

Execute myodbc-installer.exe without arguments to view a list of available options.

22.1.4.3.3. Troubleshooting ODBC Connection Problems

This section answers Connector/ODBC connection-related questions.

  • While configuring a Connector/ODBC DSN, a Could Not Load Translator or Setup Library error occurs

    For more information, refer to MS KnowledgeBase Article(Q260558). Also, make sure you have the latest valid ctl3d32.dll in your system directory.

  • On Windows, the default myodbc5w.dll (Unicode) or myodbc5a.dll (ANSI) is compiled for optimal performance. To debug Connector/ODBC (for example, to enable tracing), instead use myodbc5d.dll. To install this file, copy myodbc5d.dll over the installed myodbc5w.dll or myodbc5a.dll file. Make sure to revert back to the release version of the driver DLL once you are done with the debugging, because the debug version may cause performance issues.

22.1.4.4. Configuring a Connector/ODBC DSN on Mac OS X

To configure a DSN on Mac OS X, you can either use the command-line utility (myodbc-installer with connector/ODBC 5.1, or myodbc3i with connector/OCBC 3.51), edit the odbc.ini file within the Library/ODBC directory of the user, or use the ODBC Administrator GUI. If you have Mac OS X 10.2 or earlier, refer to Section 22.1.4.5, "Configuring a Connector/ODBC DSN on Unix". Select whether to create a User DSN or a System DSN. When adding a System DSN, you might need to authenticate with the system. Click the padlock and enter a user and password with administrator privileges.

For correct operation of ODBC Administrator, ensure that the /Library/ODBC/odbc.ini file used to set up ODBC connectivity and DSNs are writable by the admin group. If this file is not writable by this group, then the ODBC Administrator may fail, or may appear to work but not generate the correct entry.

Warning

There are known issues with the OS X ODBC Administrator and Connector/ODBC that may prevent you from creating a DSN using this method. In this case, use the command line or edit the odbc.ini file directly. Note that existing DSNs or those that you create using the myodbc3i or myodbc-installer tool can still be checked and edited using ODBC Administrator.

To create a DSN using the myodbc3i utility, you need only specify the DSN type and the DSN connection string. For example:

shell> myodbc3i -a -s -t"DSN=mydb;DRIVER=MySQL ODBC 3.51 Driver;SERVER=mysql;USER=username;PASSWORD=pass"

To use ODBC Administrator:

  1. Open the ODBC Administrator from the Utilities folder in the Applications folder.

    ODBC Administrator Main Panel Dialog
  2. On the User DSN or System DSN panel, click Add.

  3. Select the Connector/ODBC driver and click OK.

  4. You will be presented with the Data Source Name dialog. Enter the Data Source Name and an optional Description for the DSN.

    ODBC Administrator Add DSN Dialog
  5. Click Add to add a new keyword/value pair to the panel. Configure at least four pairs to specify the server, username, password and database connection parameters. See Section 22.1.4.2, "Connector/ODBC Connection Parameters".

  6. Click OK to add the DSN to the list of configured data source names.

A completed DSN configuration may look like this:

ODBC Administrator Sample DSN Dialog

You can configure other ODBC options in your DSN by adding further keyword/value pairs and setting the corresponding values. See Section 22.1.4.2, "Connector/ODBC Connection Parameters".

22.1.4.5. Configuring a Connector/ODBC DSN on Unix

On Unix, you configure DSN entries directly in the odbc.ini file. Here is a typical odbc.ini file that configures myodbc3 as the DSN name for Connector/ODBC 3.51:

;  odbc.ini configuration for Connector/ODBC and Connector/ODBC 3.51 drivers;[ODBC Data Sources]myodbc3 = MyODBC 3.51 Driver DSN[myodbc3]Driver   = /usr/local/lib/libmyodbc3.soDescription  = Connector/ODBC 3.51 Driver DSNSERVER   = localhostPORT =USER = rootPassword =Database = testOPTION   = 3SOCKET   =[Default]Driver   = /usr/local/lib/libmyodbc3.soDescription  = Connector/ODBC 3.51 Driver DSNSERVER   = localhostPORT =USER = rootPassword =Database = testOPTION   = 3SOCKET   =

Refer to the Section 22.1.4.2, "Connector/ODBC Connection Parameters", for the list of connection parameters that can be supplied.

Note

If you are using unixODBC, you can use the following tools to set up the DSN:

In some cases when using unixODBC, you might get this error:

Data source name not found and no default driver specified

If this happens, make sure the ODBCINI and ODBCSYSINI environment variables are pointing to the right odbc.ini file. For example, if your odbc.ini file is located in /usr/local/etc, set the environment variables like this:

export ODBCINI=/usr/local/etc/odbc.iniexport ODBCSYSINI=/usr/local/etc

22.1.4.6. Connecting Without a Predefined DSN

You can connect to the MySQL server using SQLDriverConnect, by specifying the DRIVER name field. Here are the connection strings for Connector/ODBC using DSN-Less connections:

For Connector/ODBC 3.51:
ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};\   SERVER=localhost;\   DATABASE=test;\   USER=venu;\   PASSWORD=venu;\   OPTION=3;"

If your programming language converts backslash followed by whitespace to a space, it is preferable to specify the connection string as a single long string, or to use a concatenation of multiple strings that does not add spaces in between. For example:

ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};"   "SERVER=localhost;"   "DATABASE=test;"   "USER=venu;"   "PASSWORD=venu;"   "OPTION=3;"

Note. On Mac OS X, you might need to specify the full path to the Connector/ODBC driver library.

Refer to Section 22.1.4.2, "Connector/ODBC Connection Parameters" for the list of connection parameters that can be supplied.

22.1.4.7. ODBC Connection Pooling

Connection pooling enables the ODBC driver to re-use existing connections to a given database from a pool of connections, instead of opening a new connection each time the database is accessed. By enabling connection pooling you can improve the overall performance of your application by lowering the time taken to open a connection to a database in the connection pool.

For more information about connection pooling: http://support.microsoft.com/default.aspx?scid=kb;EN-US;q169470.

22.1.4.8. Getting an ODBC Trace File

If you encounter difficulties or problems with Connector/ODBC, start by making a log file from the ODBC Manager and Connector/ODBC. This is called tracing, and is enabled through the ODBC Manager. The procedure for this differs for Windows, Mac OS X and Unix.

22.1.4.8.1. Enabling ODBC Tracing on Windows

To enable the trace option on Windows:

  1. The Tracing tab of the ODBC Data Source Administrator dialog box lets you configure the way ODBC function calls are traced.

    ODBC Data Source Administrator Tracing Dialog
  2. When you activate tracing from the Tracing tab, the Driver Manager logs all ODBC function calls for all subsequently run applications.

  3. ODBC function calls from applications running before tracing is activated are not logged. ODBC function calls are recorded in a log file you specify.

  4. Tracing ceases only after you click Stop Tracing Now. Remember that while tracing is on, the log file continues to increase in size and that tracing affects the performance of all your ODBC applications.

22.1.4.8.2. Enabling ODBC Tracing on Mac OS X

To enable the trace option on Mac OS X 10.3 or later, use the Tracing tab within ODBC Administrator .

  1. Open the ODBC Administrator.

  2. Select the Tracing tab.

    ODBC Administrator Tracing Dialog
  3. Select the Enable Tracing check box.

  4. Enter the location to save the Tracing log. To append information to an existing log file, click the Choose... button.

22.1.4.8.3. Enabling ODBC Tracing on Unix

To enable the trace option on Mac OS X 10.2 (or earlier) or Unix, add the trace option to the ODBC configuration:

  1. On Unix, explicitly set the Trace option in the ODBC.INI file.

    Set the tracing ON or OFF by using TraceFile and Trace parameters in odbc.ini as shown below:

    TraceFile  = /tmp/odbc.traceTrace  = 1

    TraceFile specifies the name and full path of the trace file and Trace is set to ON or OFF. You can also use 1 or YES for ON and 0 or NO for OFF. If you are using ODBCConfig from unixODBC, then follow the instructions for tracing unixODBC calls at HOWTO-ODBCConfig.

22.1.4.8.4. Enabling a Connector/ODBC Log

To generate a Connector/ODBC log, do the following:

  1. Within Windows, enable the Trace Connector/ODBC option flag in the Connector/ODBC connect/configure screen. The log is written to file C:\myodbc.log. If the trace option is not remembered when you are going back to the above screen, it means that you are not using the myodbcd.dll driver, see Section 22.1.4.3.3, "Troubleshooting ODBC Connection Problems".

    On Mac OS X, Unix, or if you are using a DSN-less connection, either supply OPTION=4 in the connection string, or set the corresponding keyword/value pair in the DSN.

  2. Start your application and try to get it to fail. Then check the Connector/ODBC trace file to find out what could be wrong.

If you need help determining what is wrong, see Section 22.1.8.1, "Connector/ODBC Community Support".

22.1.5. Connector/ODBC Examples

Once you have configured a DSN to provide access to a database, how you access and use that connection is dependent on the application or programming language. As ODBC is a standardized interface, any application or language that supports ODBC can use the DSN and connect to the configured database.

22.1.5.1. Basic Connector/ODBC Application Steps

Interacting with a MySQL server from an applications using the Connector/ODBC typically involves the following operations:

  • Configure the Connector/ODBC DSN.

  • Connect to MySQL server.

  • Initialization operations.

  • Execute SQL statements.

  • Retrieve results.

  • Perform transactions.

  • Disconnect from the server.

Most applications use some variation of these steps. The basic application steps are shown in the following diagram:

Connector/ODBC Programming Flowchart

22.1.5.2. Step-by-step Guide to Connecting to a MySQL Database throughConnector/ODBC

A typical situation where you would install Connector/ODBC is to access a database on a Linux or Unix host from a Windows machine.

As an example of the process required to set up access between two machines, the steps below take you through the basic steps. These instructions assume that you connect to system ALPHA from system BETA with a user name and password of myuser and mypassword.

On system ALPHA (the MySQL server) follow these steps:

  1. Start the MySQL server.

  2. Use GRANT to set up an account with a user name of myuser that can connect from system BETA using a password of myuser to the database test:

    GRANT ALL ON test.* to 'myuser'@'BETA' IDENTIFIED BY 'mypassword';

    For more information about MySQL privileges, refer to Section 6.3, "MySQL User Account Management".

On system BETA (the Connector/ODBC client), follow these steps:

  1. Configure a Connector/ODBC DSN using parameters that match the server, database and authentication information that you have just configured on system ALPHA.

    ParameterValueComment
    DSNremote_testA name to identify the connection.
    SERVERALPHAThe address of the remote server.
    DATABASEtestThe name of the default database.
    USERmyuserThe user name configured for access to this database.
    PASSWORDmypasswordThe password for myuser.
  2. Using an ODBC-capable application, such as Microsoft Office, connect to the MySQL server using the DSN you have just created. If the connection fails, use tracing to examine the connection process. See Section 22.1.4.8, "Getting an ODBC Trace File", for more information.

22.1.5.3. Connector/ODBC and Third-Party ODBC Tools

Once you have configured your Connector/ODBC DSN, you can access your MySQL database through any application that supports the ODBC interface, including programming languages and third-party applications. This section contains guides and help on using Connector/ODBC with various ODBC-compatible tools and applications, including Microsoft Word, Microsoft Excel and Adobe/Macromedia ColdFusion.

Connector/ODBC has been tested with the following applications:

PublisherApplicationNotes
AdobeColdFusionFormerly Macromedia ColdFusion
BorlandC++ Builder 
 Builder 4 
 Delphi 
Business ObjectsCrystal Reports 
ClarisFilemaker Pro 
CorelParadox 
Computer AssociatesVisual ObjectsAlso known as CAVO
 AllFusion ERwin Data Modeler 
GuptaTeam DeveloperPreviously known as Centura Team Developer; Gupta SQL/Windows
GensymG2-ODBC Bridge 
InlineiHTML 
LotusNotesVersions 4.5 and 4.6
MicrosoftAccess 
 Excel 
 Visio Enterprise 
 Visual C++ 
 Visual Basic 
 ODBC.NETUsing C#, Visual Basic, C++
 FoxPro 
 Visual Interdev 
OpenOffice.orgOpenOffice.org 
PerlDBD::ODBC 
Pervasive SoftwareDataJunction 
Sambar TechnologiesSambar Server 
SPSSSPSS 
SoftVelocityClarion 
SQLExpressSQLExpress for Xbase++ 
SunStarOffice 
SunSystemsVision 
SybasePowerBuilder 
 PowerDesigner 
theKompany.comData Architect 

If you know of any other applications that work with Connector/ODBC, please send mail to <> about them.

22.1.5.4. Using Connector/ODBC with Microsoft Access

You can use MySQL database with Microsoft Access using Connector/ODBC. The MySQL database can be used as an import source, an export source, or as a linked table for direct use within an Access application, so you can use Access as the front-end interface to a MySQL database.

22.1.5.4.1. Exporting Access Data to MySQL

To export a table of data from an Access database to MySQL, follow these instructions:

  1. When you open an Access database or an Access project, a Database window appears. It displays shortcuts for creating new database objects and opening existing objects.

    Access Database
  2. Click the name of the table or query to export, and then in the File menu, select Export.

  3. In the Export Object Type Object name To dialog box, in the Save As Type box, select ODBC Databases () as shown here:

    Selecting an ODBC Database
  4. In the Export dialog box, enter a name for the file (or use the suggested name), and then select OK.

  5. The Select Data Source dialog box is displayed; it lists the defined data sources for any ODBC drivers installed on your computer. Click either the File Data Source or Machine Data Source tab, and then double-click the Connector/ODBC or Connector/ODBC 3.51 data source to export to. To define a new data source for Connector/ODBC, please Section 22.1.4.3, "Configuring a Connector/ODBC DSN on Windows".

Note

Ensure that the information that you are exporting to the MySQL table is valid for the corresponding MySQL data types. Values that are outside of the supported range of the MySQL data type but valid within Access may trigger an "overflow" error during the export.

Microsoft Access connects to the MySQL Server through this data source and exports new tables and or data.

22.1.5.4.2. Importing MySQL Data to Access

To import a table or tables from MySQL to Access, follow these instructions:

  1. Open a database, or switch to the Database window for the open database.

  2. To import tables, on the File menu, point to Get External Data, and then click Import.

  3. In the Import dialog box, in the Files Of Type box, select ODBC Databases (). The Select Data Source dialog box lists the defined data sources The Select Data Source dialog box is displayed; it lists the defined data source names.

  4. If the ODBC data source that you selected requires you to log on, enter your login ID and password (additional information might also be required), and then click OK.

  5. Microsoft Access connects to the MySQL server through ODBC data source and displays the list of tables that you can import.

  6. Click each table to import, and then click OK.

22.1.5.4.3. Using Microsoft Access as a Front-end to MySQL

You can use Microsoft Access as a front end to a MySQL database by linking tables within your Microsoft Access database to tables that exist within your MySQL database. When a query is requested on a table within Access, ODBC is used to execute the queries on the MySQL database instead.

To create a linked table:

  1. Open the Access database that you want to link to MySQL.

  2. From the File, choose Get External Data->Link Tables.

    Linking Microsoft Access tables to MySQL tables
  3. From the browser, choose ODBC Databases () from the Files of type pop-up.

  4. In the Select Data Source window, choose an existing DSN, either from a File Data Source or Machine Data Source.You can also create a new DSN using the New... button. For more information on creating a DSN see Section 22.1.4.3, "Configuring a Connector/ODBC DSN on Windows".

    Linking Microsoft Access tables to MySQL tables, choosing a DSN
  5. In the Link Tables dialog, select one or more tables from the MySQL database. A link will be created to each table that you select from this list.

    Linking Microsoft Access tables to MySQL tables, table selection
  6. If Microsoft Access is unable to determine the unique record identifier for a table automatically then it may ask you to confirm the column, or combination of columns, to be used to uniquely identify each row from the source table. Select the columns to use and click OK.

    Linking Microsoft Access tables to MySQL tables, choosing unique record identifier

Once the process has been completed, you can now build interfaces and queries to the linked tables just as you would for any Access database.

Use the following procedure to view or to refresh links when the structure or location of a linked table has changed. The Linked Table Manager lists the paths to all currently linked tables.

To view or refresh links:

  1. Open the database that contains links to MySQL tables.

  2. On the Tools menu, point to Add-ins (Database Utilities in Access 2000 or newer), and then click Linked Table Manager.

  3. Select the check box for the tables whose links you want to refresh.

  4. Click OK to refresh the links.

Microsoft Access confirms a successful refresh or, if the table wasn't found, displays the Select New Location of <table name> dialog box in which you can specify its the table's new location. If several selected tables have moved to the new location that you specify, the Linked Table Manager searches that location for all selected tables, and updates all links in one step.

To change the path for a set of linked tables:

  1. Open the database that contains links to tables.

  2. On the Tools menu, point to Add-ins (Database Utilities in Access 2000 or newer), and then click Linked Table Manager.

  3. Select the Always Prompt For A New Location check box.

  4. Select the check box for the tables whose links you want to change, and then click OK.

  5. In the Select New Location of <table name> dialog box, specify the new location, click Open, and then click OK.

22.1.5.5. Using Connector/ODBC with Microsoft Word or Excel

You can use Microsoft Word and Microsoft Excel to access information from a MySQL database using Connector/ODBC. Within Microsoft Word, this facility is most useful when importing data for mailmerge, or for tables and data to be included in reports. Within Microsoft Excel, you can execute queries on your MySQL server and import the data directly into an Excel Worksheet, presenting the data as a series of rows and columns.

With both applications, data is accessed and imported into the application using Microsoft Query, which lets you execute a query though an ODBC source. You use Microsoft Query to build the SQL statement to be executed, selecting the tables, fields, selection criteria and sort order. For example, to insert information from a table in the World test database into an Excel spreadsheet, using the DSN samples shown in Section 22.1.4, "Configuring Connector/ODBC":

  1. Create a new Worksheet.

  2. From the Data menu, choose Import External Data, and then select New Database Query.

  3. Microsoft Query will start. First, you need to choose the data source, by selecting an existing Data Source Name.

    Microsoft Query, Choose Data Source
  4. Within the Query Wizard, choose the columns to import. The list of tables available to the user configured through the DSN is shown on the left, the columns that will be added to your query are shown on the right. The columns you choose are equivalent to those in the first section of a SELECT query. Click Next to continue.

    Microsoft Query, Choose Columns
  5. You can filter rows from the query (the equivalent of a WHERE clause) using the Filter Data dialog. Click Next to continue.

    Microsoft Query, Filter Data
  6. Select an (optional) sort order for the data. This is equivalent to using a ORDER BY clause in your SQL query. You can select up to three fields for sorting the information returned by the query. Click Next to continue.

    Microsoft Query, Sort Order
  7. Select the destination for your query. You can select to return the data Microsoft Excel, where you can choose a worksheet and cell where the data will be inserted; you can continue to view the query and results within Microsoft Query, where you can edit the SQL query and further filter and sort the information returned; or you can create an OLAP Cube from the query, which can then be used directly within Microsoft Excel. Click Finish.

    Microsoft Query, Selecting a destination

The same process can be used to import data into a Word document, where the data will be inserted as a table. This can be used for mail merge purposes (where the field data is read from a Word table), or where you want to include data and reports within a report or other document.

22.1.5.6. Using Connector/ODBC with Crystal Reports

Crystal Reports can use an ODBC DSN to connect to a database from which you to extract data and information for reporting purposes.

Note

There is a known issue with certain versions of Crystal Reports where the application is unable to open and browse tables and fields through an ODBC connection. Before using Crystal Reports with MySQL, please ensure that you have update to the latest version, including any outstanding service packs and hotfixes. For more information on this issue, see the Business) Objects Knowledgebase for more information.

For example, to create a simple crosstab report within Crystal Reports XI, follow these steps:

  1. Create a DSN using the Data Sources (ODBC) tool. You can either specify a complete database, including user name and password, or you can build a basic DSN and use Crystal Reports to set the user name and password.

    For the purposes of this example, a DSN that provides a connection to an instance of the MySQL Sakila sample database has been created.

  2. Open Crystal Reports and create a new project, or an open an existing reporting project into which you want to insert data from your MySQL data source.

  3. Start the Cross-Tab Report Wizard, either by clicking the option on the Start Page. Expand the Create New Connection folder, then expand the ODBC (RDO) folder to obtain a list of ODBC data sources.

    You will be asked to select a data source.

    Selecting an Data Source in Crystal Reports
  4. When you first expand the ODBC (RDO) folder you will be presented the Data Source Selection screen. From here you can select either a pre-configured DSN, open a file-based DSN or enter and manual connection string. For this example, the Sakila DSN will be used.

    If the DSN contains a user name/password combination, or you want to use different authentication credentials, click Next to enter the user name and password that you want to use. Otherwise, click Finish to continue the data source selection wizard.

    Selecting an ODBC Data Source in Crystal Reports
  5. You will be returned the Cross-Tab Report Creation Wizard. You now need to select the database and tables that you want to include in your report. For our example, we will expand the selected Sakila database. Click the city table and use the > button to add the table to the report. Then repeat the action with the country table. Alternatively you can select multiple tables and add them to the report.

    Finally, you can select the parent Sakila resource and add of the tables to the report.

    Once you have selected the tables you want to include, click Next to continue.

    Selecting an tables in Crystal Reports
  6. Crystal Reports will now read the table definitions and automatically identify the links between the tables. The identification of links between tables enables Crystal Reports to automatically lookup and summarize information based on all the tables in the database according to your query. If Crystal Reports is unable to perform the linking itself, you can manually create the links between fields in the tables you have selected.

    Click Next to continue the process.

    Table links/structure in Crystal Reports
  7. You can now select the columns and rows that to include within the Cross-Tab report. Drag and drop or use the > buttons to add fields to each area of the report. In the example shown, we will report on cities, organized by country, incorporating a count of the number of cities within each country. If you want to browse the data, select a field and click the Browse Data... button.

    Click Next to create a graph of the results. Since we are not creating a graph from this data, click Finish to generate the report.

    Cross-tab definition in Crystal Reports
  8. The finished report will be shown, a sample of the output from the Sakila sample database is shown below.

    Cross-tab final report in Crystal Reports

Once the ODBC connection has been opened within Crystal Reports, you can browse and add any fields within the available tables into your reports.

22.1.5.7. Connector/ODBC Programming

With a suitable ODBC Manager and the Connector/ODBC driver installed, any programming language or environment that can support ODBC can connect to a MySQL database through Connector/ODBC.

This includes, but is not limited to, Microsoft support languages (including Visual Basic, C# and interfaces such as ODBC.NET), Perl (through the DBI module, and the DBD::ODBC driver).

22.1.5.7.1. Using Connector/ODBC with Visual Basic Using ADO, DAO and RDO

This section contains simple examples of the use of Connector/ODBC with ADO, DAO and RDO.

22.1.5.7.1.1. ADO: rs.addNew, rs.delete, andrs.update

The following ADO (ActiveX Data Objects) example creates a table my_ado and demonstrates the use of rs.addNew, rs.delete, and rs.update.

Private Sub myodbc_ado_Click()Dim conn As ADODB.ConnectionDim rs As ADODB.RecordsetDim fld As ADODB.FieldDim sql As String'connect to MySQL server using Connector/ODBCSet conn = New ADODB.Connectionconn.ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};"_& "SERVER=localhost;"_& " DATABASE=test;"_& "UID=venu;PWD=venu; OPTION=3"conn.Open'create tableconn.Execute "DROP TABLE IF EXISTS my_ado"conn.Execute "CREATE TABLE my_ado(id int not null primary key, name varchar(20)," _& "txt text, dt date, tm time, ts timestamp)"'direct insertconn.Execute "INSERT INTO my_ado(id,name,txt) values(1,100,'venu')"conn.Execute "INSERT INTO my_ado(id,name,txt) values(2,200,'MySQL')"conn.Execute "INSERT INTO my_ado(id,name,txt) values(3,300,'Delete')"Set rs = New ADODB.Recordsetrs.CursorLocation = adUseServer'fetch the initial table ..rs.Open "SELECT * FROM my_ado", connDebug.Print rs.RecordCountrs.MoveFirstDebug.Print String(50, "-") & "Initial my_ado Result Set " & String(50, "-")For Each fld In rs.FieldsDebug.Print fld.Name,NextDebug.PrintDo Until rs.EOFFor Each fld In rs.FieldsDebug.Print fld.Value,Nextrs.MoveNextDebug.PrintLooprs.Close'rs insertrs.Open "select * from my_ado", conn, adOpenDynamic, adLockOptimisticrs.AddNewrs!Name = "Monty"rs!txt = "Insert row"rs.Updaters.Close'rs updaters.Open "SELECT * FROM my_ado"rs!Name = "update"rs!txt = "updated-row"rs.Updaters.Close'rs update second time..rs.Open "SELECT * FROM my_ado"rs!Name = "update"rs!txt = "updated-second-time"rs.Updaters.Close'rs deleters.Open "SELECT * FROM my_ado"rs.MoveNextrs.MoveNextrs.Deleters.Close'fetch the updated table ..rs.Open "SELECT * FROM my_ado", connDebug.Print rs.RecordCountrs.MoveFirstDebug.Print String(50, "-") & "Updated my_ado Result Set " & String(50, "-")For Each fld In rs.FieldsDebug.Print fld.Name,NextDebug.PrintDo Until rs.EOFFor Each fld In rs.FieldsDebug.Print fld.Value,Nextrs.MoveNextDebug.PrintLooprs.Closeconn.CloseEnd Sub
22.1.5.7.1.2. DAO: rs.addNew, rs.update, andScrolling

The following DAO (Data Access Objects) example creates a table my_dao and demonstrates the use of rs.addNew, rs.update, and result set scrolling.

Private Sub myodbc_dao_Click()Dim ws As WorkspaceDim conn As ConnectionDim queryDef As queryDefDim str As String'connect to MySQL using MySQL ODBC 3.51 DriverSet ws = DBEngine.CreateWorkspace("", "venu", "venu", dbUseODBC)str = "odbc;DRIVER={MySQL ODBC 3.51 Driver};"_& "SERVER=localhost;"_& " DATABASE=test;"_& "UID=venu;PWD=venu; OPTION=3"Set conn = ws.OpenConnection("test", dbDriverNoPrompt, False, str)'Create table my_daoSet queryDef = conn.CreateQueryDef("", "drop table if exists my_dao")queryDef.ExecuteSet queryDef = conn.CreateQueryDef("", "create table my_dao(Id INT AUTO_INCREMENT PRIMARY KEY, " _& "Ts TIMESTAMP(14) NOT NULL, Name varchar(20), Id2 INT)")queryDef.Execute'Insert new records using rs.addNewSet rs = conn.OpenRecordset("my_dao")Dim i As IntegerFor i = 10 To 15rs.AddNewrs!Name = "insert record" & irs!Id2 = irs.UpdateNext irs.Close'rs update..Set rs = conn.OpenRecordset("my_dao")rs.Editrs!Name = "updated-string"rs.Updaters.Close'fetch the table back...Set rs = conn.OpenRecordset("my_dao", dbOpenDynamic)str = "Results:"rs.MoveFirstWhile Not rs.EOFstr = " " & rs!Id & " , " & rs!Name & ", " & rs!Ts & ", " & rs!Id2Debug.Print "DATA:" & strrs.MoveNextWend'rs Scrollingrs.MoveFirststr = " FIRST ROW: " & rs!Id & " , " & rs!Name & ", " & rs!Ts & ", " & rs!Id2Debug.Print strrs.MoveLaststr = " LAST ROW: " & rs!Id & " , " & rs!Name & ", " & rs!Ts & ", " & rs!Id2Debug.Print strrs.MovePreviousstr = " LAST-1 ROW: " & rs!Id & " , " & rs!Name & ", " & rs!Ts & ", " & rs!Id2Debug.Print str'free all resourcesrs.ClosequeryDef.Closeconn.Closews.CloseEnd Sub
22.1.5.7.1.3. RDO: rs.addNew and rs.update

The following RDO (Remote Data Objects) example creates a table my_rdo and demonstrates the use of rs.addNew and rs.update.

Dim rs As rdoResultsetDim cn As New rdoConnectionDim cl As rdoColumnDim SQL As String'cn.Connect = "DSN=test;"cn.Connect = "DRIVER={MySQL ODBC 3.51 Driver};"_& "SERVER=localhost;"_& " DATABASE=test;"_& "UID=venu;PWD=venu; OPTION=3"cn.CursorDriver = rdUseOdbccn.EstablishConnection rdDriverPrompt'drop table my_rdoSQL = "drop table if exists my_rdo"cn.Execute SQL, rdExecDirect'create table my_rdoSQL = "create table my_rdo(id int, name varchar(20))"cn.Execute SQL, rdExecDirect'insert - directSQL = "insert into my_rdo values (100,'venu')"cn.Execute SQL, rdExecDirectSQL = "insert into my_rdo values (200,'MySQL')"cn.Execute SQL, rdExecDirect'rs insertSQL = "select * from my_rdo"Set rs = cn.OpenResultset(SQL, rdOpenStatic, rdConcurRowVer, rdExecDirect)rs.AddNewrs!id = 300rs!Name = "Insert1"rs.Updaters.Close'rs insertSQL = "select * from my_rdo"Set rs = cn.OpenResultset(SQL, rdOpenStatic, rdConcurRowVer, rdExecDirect)rs.AddNewrs!id = 400rs!Name = "Insert 2"rs.Updaters.Close'rs updateSQL = "select * from my_rdo"Set rs = cn.OpenResultset(SQL, rdOpenStatic, rdConcurRowVer, rdExecDirect)rs.Editrs!id = 999rs!Name = "updated"rs.Updaters.Close'fetch back...SQL = "select * from my_rdo"Set rs = cn.OpenResultset(SQL, rdOpenStatic, rdConcurRowVer, rdExecDirect)Do Until rs.EOFFor Each cl In rs.rdoColumnsDebug.Print cl.Value,Nextrs.MoveNextDebug.PrintLoopDebug.Print "Row count="; rs.RowCount'closers.Closecn.CloseEnd Sub
22.1.5.7.2. Using Connector/ODBC with .NET

This section contains simple examples that demonstrate the use of Connector/ODBC drivers with ODBC.NET.

22.1.5.7.2.1. Using Connector/ODBC with ODBC.NET and C# (C sharp)

The following sample creates a table my_odbc_net and demonstrates its use in C#.

/** * @sample : mycon.cs * @purpose   : Demo sample for ODBC.NET using Connector/ODBC * @author : Venu, <> * * (C) Copyright MySQL AB, 1995-2006 * **//* build command * *  csc /t:exe *  /out:mycon.exe mycon.cs *  /r:Microsoft.Data.Odbc.dll */using Console = System.Console;using Microsoft.Data.Odbc;namespace myodbc3{  class mycon  { static void Main(string[] args) {  try {  //Connection string for Connector/ODBC 3.51  string MyConString = "DRIVER={MySQL ODBC 3.51 Driver};" + "SERVER=localhost;" + "DATABASE=test;" + "UID=venu;" + "PASSWORD=venu;" + "OPTION=3";  //Connect to MySQL using Connector/ODBC  OdbcConnection MyConnection = new OdbcConnection(MyConString);  MyConnection.Open();  Console.WriteLine("\n !!! success, connected successfully !!!\n");  //Display connection information  Console.WriteLine("Connection Information:");  Console.WriteLine("\tConnection String:" + MyConnection.ConnectionString);  Console.WriteLine("\tConnection Timeout:" + MyConnection.ConnectionTimeout);  Console.WriteLine("\tDatabase:" + MyConnection.Database);  Console.WriteLine("\tDataSource:" + MyConnection.DataSource);  Console.WriteLine("\tDriver:" + MyConnection.Driver);  Console.WriteLine("\tServerVersion:" + MyConnection.ServerVersion);  //Create a sample table  OdbcCommand MyCommand = new OdbcCommand("DROP TABLE IF EXISTS my_odbc_net", MyConnection);  MyCommand.ExecuteNonQuery();  MyCommand.CommandText = "CREATE TABLE my_odbc_net(id int, name varchar(20), idb bigint)";  MyCommand.ExecuteNonQuery();  //Insert  MyCommand.CommandText = "INSERT INTO my_odbc_net VALUES(10,'venu', 300)";  Console.WriteLine("INSERT, Total rows affected:" + MyCommand.ExecuteNonQuery());  //Insert  MyCommand.CommandText = "INSERT INTO my_odbc_net VALUES(20,'mysql',400)";  Console.WriteLine("INSERT, Total rows affected:" + MyCommand.ExecuteNonQuery());  //Insert  MyCommand.CommandText = "INSERT INTO my_odbc_net VALUES(20,'mysql',500)";  Console.WriteLine("INSERT, Total rows affected:" + MyCommand.ExecuteNonQuery());  //Update  MyCommand.CommandText = "UPDATE my_odbc_net SET id=999 WHERE id=20";  Console.WriteLine("Update, Total rows affected:" + MyCommand.ExecuteNonQuery());  //COUNT(*)  MyCommand.CommandText = "SELECT COUNT(*) as TRows FROM my_odbc_net";  Console.WriteLine("Total Rows:" + MyCommand.ExecuteScalar());  //Fetch  MyCommand.CommandText = "SELECT * FROM my_odbc_net";  OdbcDataReader MyDataReader;  MyDataReader =  MyCommand.ExecuteReader();  while (MyDataReader.Read()) {  if(string.Compare(MyConnection.Driver,"myodbc3.dll") == 0) { //Supported only by Connector/ODBC 3.51 Console.WriteLine("Data:" + MyDataReader.GetInt32(0) + " " +  MyDataReader.GetString(1) + " " +  MyDataReader.GetInt64(2));  }  else { //BIGINTs not supported by Connector/ODBC Console.WriteLine("Data:" + MyDataReader.GetInt32(0) + " " +  MyDataReader.GetString(1) + " " +  MyDataReader.GetInt32(2));  } }  //Close all resources  MyDataReader.Close();  MyConnection.Close(); }  catch (OdbcException MyOdbcException) //Catch any ODBC exception .. {  for (int i=0; i < MyOdbcException.Errors.Count; i++) {  Console.Write("ERROR #" + i + "\n" + "Message: " + MyOdbcException.Errors[i].Message + "\n" + "Native: " + MyOdbcException.Errors[i].NativeError.ToString() + "\n" + "Source: " + MyOdbcException.Errors[i].Source + "\n" + "SQL: " + MyOdbcException.Errors[i].SQLState + "\n"); } } }  }}
22.1.5.7.2.2. Using Connector/ODBC with ODBC.NET and Visual Basic

The following sample creates a table my_vb_net and demonstrates the use in VB.

' @sample : myvb.vb' @purpose   : Demo sample for ODBC.NET using Connector/ODBC' @author : Venu, <>'' (C) Copyright MySQL AB, 1995-2006'''' build command'' vbc /target:exe' /out:myvb.exe' /r:Microsoft.Data.Odbc.dll' /r:System.dll' /r:System.Data.dll'Imports Microsoft.Data.OdbcImports SystemModule myvb  Sub Main() Try  'Connector/ODBC 3.51 connection string  Dim MyConString As String = "DRIVER={MySQL ODBC 3.51 Driver};" & _  "SERVER=localhost;" & _  "DATABASE=test;" & _  "UID=venu;" & _  "PASSWORD=venu;" & _  "OPTION=3;"  'Connection  Dim MyConnection As New OdbcConnection(MyConString)  MyConnection.Open()  Console.WriteLine("Connection State::" & MyConnection.State.ToString)  'Drop  Console.WriteLine("Dropping table")  Dim MyCommand As New OdbcCommand()  MyCommand.Connection = MyConnection  MyCommand.CommandText = "DROP TABLE IF EXISTS my_vb_net"  MyCommand.ExecuteNonQuery()  'Create  Console.WriteLine("Creating....")  MyCommand.CommandText = "CREATE TABLE my_vb_net(id int, name varchar(30))"  MyCommand.ExecuteNonQuery()  'Insert  MyCommand.CommandText = "INSERT INTO my_vb_net VALUES(10,'venu')"  Console.WriteLine("INSERT, Total rows affected:" & _  MyCommand.ExecuteNonQuery())  'Insert  MyCommand.CommandText = "INSERT INTO my_vb_net VALUES(20,'mysql')"  Console.WriteLine("INSERT, Total rows affected:" & _  MyCommand.ExecuteNonQuery())  'Insert  MyCommand.CommandText = "INSERT INTO my_vb_net VALUES(20,'mysql')"  Console.WriteLine("INSERT, Total rows affected:" & _  MyCommand.ExecuteNonQuery())  'Insert  MyCommand.CommandText = "INSERT INTO my_vb_net(id) VALUES(30)"  Console.WriteLine("INSERT, Total rows affected:" & _ MyCommand.ExecuteNonQuery())  'Update  MyCommand.CommandText = "UPDATE my_vb_net SET id=999 WHERE id=20"  Console.WriteLine("Update, Total rows affected:" & _  MyCommand.ExecuteNonQuery())  'COUNT(*)  MyCommand.CommandText = "SELECT COUNT(*) as TRows FROM my_vb_net"  Console.WriteLine("Total Rows:" & MyCommand.ExecuteScalar())  'Select  Console.WriteLine("Select * FROM my_vb_net")  MyCommand.CommandText = "SELECT * FROM my_vb_net"  Dim MyDataReader As OdbcDataReader  MyDataReader = MyCommand.ExecuteReader  While MyDataReader.Read If MyDataReader("name") Is DBNull.Value Then  Console.WriteLine("id = " & _  CStr(MyDataReader("id")) & "  name = " & _  "NULL") Else  Console.WriteLine("id = " & _  CStr(MyDataReader("id")) & "  name = " & _  CStr(MyDataReader("name"))) End If  End While  'Catch ODBC Exception Catch MyOdbcException As OdbcException  Dim i As Integer  Console.WriteLine(MyOdbcException.ToString)  'Catch program exception Catch MyException As Exception  Console.WriteLine(MyException.ToString) End Try  End Sub

22.1.6. Connector/ODBC Reference

This section provides reference material for the Connector/ODBC API, showing supported functions and methods, supported MySQL column types and the corresponding native type in Connector/ODBC, and the error codes returned by Connector/ODBC when a fault occurs.

22.1.6.1. Connector/ODBC API Reference

This section summarizes ODBC routines, categorized by functionality.

For the complete ODBC API reference, please refer to the ODBC Programmer's Reference at http://msdn.microsoft.com/en-us/library/ms714177.aspx.

An application can call SQLGetInfo function to obtain conformance information about Connector/ODBC. To obtain information about support for a specific function in the driver, an application can call SQLGetFunctions.

Note

For backward compatibility, the Connector/ODBC driver supports all deprecated functions.

The following tables list Connector/ODBC API calls grouped by task:

Table 22.6. ODBC API Calls for Connecting to a Data Source

Function NameConnector/ODBC Supports?StandardPurpose
SQLAllocHandleYesISO 92Obtains an environment, connection, statement, or descriptor handle.
SQLConnectYesISO 92Connects to a specific driver by data source name, user ID, and password.
SQLDriverConnectYesODBCConnects to a specific driver by connection string or requests that the Driver Manager and driver display connection dialogboxes for the user.
SQLAllocEnvYesDeprecatedObtains an environment handle allocated from driver.
SQLAllocConnectYesDeprecatedObtains a connection handle

Table 22.7. ODBC API Calls for Obtaining Information about a Driver and Data Source

Function NameConnector/ODBC Supports?StandardPurpose
SQLDataSourcesNoISO 92Returns the list of available data sources, handled by the Driver Manager
SQLDriversNoODBCReturns the list of installed drivers and their attributes, handles byDriver Manager
SQLGetInfoYesISO 92Returns information about a specific driver and data source.
SQLGetFunctionsYesISO 92Returns supported driver functions.
SQLGetTypeInfoYesISO 92Returns information about supported data types.

Table 22.8. ODBC API Calls for Setting and Retrieving Driver Attributes

Function NameConnector/ODBC Supports?StandardPurpose
SQLSetConnectAttrYesISO 92Sets a connection attribute.
SQLGetConnectAttrYesISO 92Returns the value of a connection attribute.
SQLSetConnectOptionYesDeprecatedSets a connection option
SQLGetConnectOptionYesDeprecatedReturns the value of a connection option
SQLSetEnvAttrYesISO 92Sets an environment attribute.
SQLGetEnvAttrYesISO 92Returns the value of an environment attribute.
SQLSetStmtAttrYesISO 92Sets a statement attribute.
SQLGetStmtAttrYesISO 92Returns the value of a statement attribute.
SQLSetStmtOptionYesDeprecatedSets a statement option
SQLGetStmtOptionYesDeprecatedReturns the value of a statement option

Table 22.9. ODBC API Calls for Preparing SQL Requests

Function NameConnector/ODBC Supports?StandardPurpose
SQLAllocStmtYesDeprecatedAllocates a statement handle
SQLPrepareYesISO 92Prepares an SQL statement for later execution.
SQLBindParameterYesODBCAssigns storage for a parameter in an SQL statement. Connector/ODBC 5.2 adds support for "out" and "inout" parameters, through the SQL_PARAM_OUTPUT or SQL_PARAM_INPUT_OUTPUT type specifiers. ("Out" and "inout" parameters are not supported for LONGTEXT andLONGBLOB columns.)
SQLGetCursorNameYesISO 92Returns the cursor name associated with a statement handle.
SQLSetCursorNameYesISO 92Specifies a cursor name.
SQLSetScrollOptionsYesODBCSets options that control cursor behavior.

Table 22.10. ODBC API Calls for Submitting Requests

Function NameConnector/ODBC Supports?StandardPurpose
SQLExecuteYesISO 92Executes a prepared statement.
SQLExecDirectYesISO 92Executes a statement
SQLNativeSqlYesODBCReturns the text of an SQL statement as translated by the driver.
SQLDescribeParamYesODBCReturns the description for a specific parameter in a statement.
SQLNumParamsYesISO 92Returns the number of parameters in a statement.
SQLParamDataYesISO 92Used in conjunction with SQLPutData to supply parameter data at execution time. (Useful for long data values.)
SQLPutDataYesISO 92Sends part or all of a data value for a parameter. (Useful for long datavalues.)

Table 22.11. ODBC API Calls for Retrieving Results and Information about Results

Function NameConnector/ODBC Supports?StandardPurpose
SQLRowCountYesISO 92Returns the number of rows affected by an insert, update, or delete request.
SQLNumResultColsYesISO 92Returns the number of columns in the result set.
SQLDescribeColYesISO 92Describes a column in the result set.
SQLColAttributeYesISO 92Describes attributes of a column in the result set.
SQLColAttributesYesDeprecatedDescribes attributes of a column in the result set.
SQLFetchYesISO 92Returns multiple result rows.
SQLFetchScrollYesISO 92Returns scrollable result rows.
SQLExtendedFetchYesDeprecatedReturns scrollable result rows.
SQLSetPosYesODBCPositions a cursor within a fetched block of data and enables an application to refresh data in the rowset or to update or delete data in the result set.
SQLBulkOperationsYesODBCPerforms bulk insertions and bulk bookmark operations, including update,delete, and fetch by bookmark.

Table 22.12. ODBC API Calls for Retrieving Error or Diagnostic Information

Function NameConnector/ODBC Supports?StandardPurpose
SQLErrorYesDeprecatedReturns additional error or status information
SQLGetDiagFieldYesISO 92Returns additional diagnostic information (a single field of the diagnostic data structure).
SQLGetDiagRecYesISO 92Returns additional diagnostic information (multiple fields of thediagnostic data structure).

Table 22.13. ODBC API Calls for Obtaining Information about the Data Source's SystemTables (Catalog Functions) Item

Function NameConnector/ODBC Supports?StandardPurpose
SQLColumnPrivilegesYesODBCReturns a list of columns and associated privileges for one or more tables.
SQLColumnsYesX/OpenReturns the list of column names in specified tables.
SQLForeignKeysYesODBCReturns a list of column names that make up foreign keys, if they exist for a specified table.
SQLPrimaryKeysYesODBCReturns the list of column names that make up the primary key for a table.
SQLSpecialColumnsYesX/OpenReturns information about the optimal set of columns that uniquely identifies a row in a specified table, or the columns that are automatically updated when any value in the row is updated by a transaction.
SQLStatisticsYesISO 92Returns statistics about a single table and the list of indexesassociated with the table.
SQLTablePrivilegesYesODBCReturns a list of tables and the privileges associated with each table.
SQLTablesYesX/OpenReturns the list of table names stored in a specific data source.

Table 22.14. ODBC API Calls for Performing Transactions

Function NameConnector/ODBC Supports?StandardPurpose
SQLTransactYesDeprecatedCommits or rolls back a transaction
SQLEndTranYesISO 92Commits or rolls back atransaction.

Table 22.15. ODBC API Calls for Terminating a Statement

Function NameConnector/ODBC Supports?StandardPurpose
SQLFreeStmtYesISO 92Ends statement processing, discards pending results, and, optionally, frees all resources associated with the statementhandle.
SQLCloseCursorYesISO 92Closes a cursor that has been opened on a statement handle.
SQLCancelYesISO 92Cancels an SQL statement.

Table 22.16. ODBC API Calls for Terminating a Connection

Function NameConnector/ODBC Supports?StandardPurpose
SQLDisconnectYesISO 92Closes the connection.
SQLFreeHandleYesISO 92Releases an environment, connection, statement, or descriptor handle.
SQLFreeConnectYesDeprecatedReleases connection handle.
SQLFreeEnvYesDeprecatedReleases an environment handle.

22.1.6.2. Connector/ODBC Data Types

The following table illustrates how Connector/ODBC maps the server data types to default SQL and C data types.

Table 22.17. How Connector/ODBC Maps MySQL Data Types to SQL and C Data Types

Native ValueSQL TypeC Type
bigint unsignedSQL_BIGINTSQL_C_UBIGINT
bigintSQL_BIGINTSQL_C_SBIGINT
bitSQL_BITSQL_C_BIT
bitSQL_CHARSQL_C_CHAR
blobSQL_LONGVARBINARYSQL_C_BINARY
boolSQL_CHARSQL_C_CHAR
charSQL_CHARSQL_C_CHAR
dateSQL_DATESQL_C_DATE
datetimeSQL_TIMESTAMPSQL_C_TIMESTAMP
decimalSQL_DECIMALSQL_C_CHAR
double precisionSQL_DOUBLESQL_C_DOUBLE
doubleSQL_FLOATSQL_C_DOUBLE
enumSQL_VARCHARSQL_C_CHAR
floatSQL_REALSQL_C_FLOAT
int unsignedSQL_INTEGERSQL_C_ULONG
intSQL_INTEGERSQL_C_SLONG
integer unsignedSQL_INTEGERSQL_C_ULONG
integerSQL_INTEGERSQL_C_SLONG
long varbinarySQL_LONGVARBINARYSQL_C_BINARY
long varcharSQL_LONGVARCHARSQL_C_CHAR
longblobSQL_LONGVARBINARYSQL_C_BINARY
longtextSQL_LONGVARCHARSQL_C_CHAR
mediumblobSQL_LONGVARBINARYSQL_C_BINARY
mediumint unsignedSQL_INTEGERSQL_C_ULONG
mediumintSQL_INTEGERSQL_C_SLONG
mediumtextSQL_LONGVARCHARSQL_C_CHAR
numericSQL_NUMERICSQL_C_CHAR
realSQL_FLOATSQL_C_DOUBLE
setSQL_VARCHARSQL_C_CHAR
smallint unsignedSQL_SMALLINTSQL_C_USHORT
smallintSQL_SMALLINTSQL_C_SSHORT
textSQL_LONGVARCHARSQL_C_CHAR
timeSQL_TIMESQL_C_TIME
timestampSQL_TIMESTAMPSQL_C_TIMESTAMP
tinyblobSQL_LONGVARBINARYSQL_C_BINARY
tinyint unsignedSQL_TINYINTSQL_C_UTINYINT
tinyintSQL_TINYINTSQL_C_STINYINT
tinytextSQL_LONGVARCHARSQL_C_CHAR
varcharSQL_VARCHARSQL_C_CHAR
yearSQL_SMALLINTSQL_C_SHORT

22.1.6.3. Connector/ODBC Error Codes

The following tables lists the error codes returned by Connector/ODBC apart from the server errors.

Table 22.18. Special Error Codes Returned by Connector/ODBC

Native CodeSQLSTATE 2SQLSTATE 3Error Message
5000100001000General warning
5010100401004String data, right truncated
50201S0201S02Option value changed
50301S0301S03No rows updated/deleted
50401S0401S04More than one row updated/deleted
50501S0601S06Attempt to fetch before the result set returned the first row set
5060700107002SQLBindParameter not used for all parameters
5070700507005Prepared statement not a cursor-specification
5080700907009Invalid descriptor index
5090800208002Connection name in use
5100800308003Connection does not exist
5112400024000Invalid cursor state
5122500025000Invalid transaction state
51325S0125S01Transaction state unknown
5143400034000Invalid cursor name
515S1000HY000General driver defined error
516S1001HY001Memory allocation error
517S1002HY002Invalid column number
518S1003HY003Invalid application buffer type
519S1004HY004Invalid SQL data type
520S1009HY009Invalid use of null pointer
521S1010HY010Function sequence error
522S1011HY011Attribute can not be set now
523S1012HY012Invalid transaction operation code
524S1013HY013Memory management error
525S1015HY015No cursor name available
526S1024HY024Invalid attribute value
527S1090HY090Invalid string or buffer length
528S1091HY091Invalid descriptor field identifier
529S1092HY092Invalid attribute/option identifier
530S1093HY093Invalid parameter number
531S1095HY095Function type out of range
532S1106HY106Fetch type out of range
533S1117HY117Row value out of range
534S1109HY109Invalid cursor position
535S1C00HYC00Optional feature not implemented
021S0121S01Column count does not match value count
02300023000Integrity constraint violation
04200042000Syntax error or access violation
042S0242S02Base table or view not found
042S1242S12Index not found
042S2142S21Column already exists
042S2242S22Column not found
008S0108S01Communication link failure

22.1.7. Connector/ODBC Notes and Tips

Here are some common notes and tips for using Connector/ODBC within different environments, applications and tools. The notes provided here are based on the experiences of Connector/ODBC developers and users.

22.1.7.1. Connector/ODBC General Functionality

This section provides help with common queries and areas of functionality in MySQL and how to use them with Connector/ODBC.

22.1.7.1.1. Obtaining Auto-Increment Values

Obtaining the value of column that uses AUTO_INCREMENT after an INSERT statement can be achieved in a number of different ways. To obtain the value immediately after an INSERT, use a SELECT query with the LAST_INSERT_ID() function.

For example, using Connector/ODBC you would execute two separate statements, the INSERT statement and the SELECT query to obtain the auto-increment value.

INSERT INTO tbl (auto,text) VALUES(NULL,'text');SELECT LAST_INSERT_ID();

If you do not require the value within your application, but do require the value as part of another INSERT, the entire process can be handled by executing the following statements:

INSERT INTO tbl (auto,text) VALUES(NULL,'text');INSERT INTO tbl2 (id,text) VALUES(LAST_INSERT_ID(),'text');

Certain ODBC applications (including Delphi and Access) may have trouble obtaining the auto-increment value using the previous examples. In this case, try the following statement as an alternative:

SELECT * FROM tbl WHERE auto IS NULL;

This alternative method requires that sql_auto_is_null variable is not set to 0. See Section 5.1.4, "Server System Variables".

See also Section 22.8.11.3, "How to Get the Unique ID for the Last Inserted Row".

22.1.7.1.2. Dynamic Cursor Support

Support for the dynamic cursor is provided in Connector/ODBC 3.51, but dynamic cursors are not enabled by default. You can enable this function within Windows by selecting the Enable Dynamic Cursor check box within the ODBC Data Source Administrator.

On other platforms, you can enable the dynamic cursor by adding 32 to the OPTION value when creating the DSN.

22.1.7.1.3. Connector/ODBC Performance

The Connector/ODBC driver has been optimized to provide very fast performance. If you experience problems with the performance of Connector/ODBC, or notice a large amount of disk activity for simple queries, there are a number of aspects to check:

  • Ensure that ODBC Tracing is not enabled. With tracing enabled, a lot of information is recorded in the tracing file by the ODBC Manager. You can check, and disable, tracing within Windows using the Tracing panel of the ODBC Data Source Administrator. Within Mac OS X, check the Tracing panel of ODBC Administrator. See Section 22.1.4.8, "Getting an ODBC Trace File".

  • Make sure you are using the standard version of the driver, and not the debug version. The debug version includes additional checks and reporting measures.

  • Disable the Connector/ODBC driver trace and query logs. These options are enabled for each DSN, so make sure to examine only the DSN that you are using in your application. Within Windows, you can disable the Connector/ODBC and query logs by modifying the DSN configuration. Within Mac OS X and Unix, ensure that the driver trace (option value 4) and query logging (option value 524288) are not enabled.

22.1.7.1.4. Setting ODBC Query Timeout in Windows

For more information on how to set the query timeout on Microsoft Windows when executing queries through an ODBC connection, read the Microsoft knowledgebase document at http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B153756.

22.1.7.2. Connector/ODBC Application-Specific Tips

Most programs should work with Connector/ODBC, but for each of those listed here, there are specific notes and tips to improve or enhance the way you work with Connector/ODBC and these applications.

With all applications, ensure that you are using the latest Connector/ODBC drivers, ODBC Manager and any supporting libraries and interfaces used by your application. For example, on Windows, using the latest version of Microsoft Data Access Components (MDAC) will improve the compatibility with ODBC in general, and with the Connector/ODBC driver.

22.1.7.2.1. Using Connector/ODBC with Microsoft Applications

The majority of Microsoft applications have been tested with Connector/ODBC, including Microsoft Office, Microsoft Access and the various programming languages supported within ASP and Microsoft Visual Studio.

22.1.7.2.1.1. Microsoft Access

To improve the integration between Microsoft Access and MySQL through Connector/ODBC:

  • For all versions of Access, enable the Connector/ODBC Return matching rows option. For Access 2.0, also enable the Simulate ODBC 1.0 option.

  • Include a TIMESTAMP column in all tables that you want to be able to update. For maximum portability, do not use a length specification in the column declaration (which is unsupported within MySQL in versions earlier than 4.1).

  • Include a primary key in each MySQL table you want to use with Access. If not, new or updated rows may show up as #DELETED#.

  • Use only DOUBLE float fields. Access fails when comparing with single-precision floats. The symptom usually is that new or updated rows may show up as #DELETED# or that you cannot find or update rows.

  • If you are using Connector/ODBC to link to a table that has a BIGINT column, the results are displayed as #DELETED#. The work around solution is:

    • Have one more dummy column with TIMESTAMP as the data type.

    • Select the Change BIGINT columns to INT option in the connection dialog in ODBC DSN Administrator.

    • Delete the table link from Access and re-create it.

    Old records may still display as #DELETED#, but newly added/updated records are displayed properly.

  • If you still get the error Another user has changed your data after adding a TIMESTAMP column, the following trick may help you:

    Do not use a table data sheet view. Instead, create a form with the fields you want, and use that form data sheet view. Set the DefaultValue property for the TIMESTAMP column to NOW(). Consider hiding the TIMESTAMP column from view so your users are not confused.

  • In some cases, Access may generate SQL statements that MySQL cannot understand. You can fix this by selecting "Query|SQLSpecific|Pass-Through" from the Access menu.

  • On Windows NT, Access reports BLOB columns as OLE OBJECTS. If you want to have MEMO columns instead, change BLOB columns to TEXT with ALTER TABLE.

  • Access cannot always handle the MySQL DATE column properly. If you have a problem with these, change the columns to DATETIME.

  • If you have in Access a column defined as BYTE, Access tries to export this as TINYINT instead of TINYINT UNSIGNED. This gives you problems if you have values larger than 127 in the column.

  • If you have very large (long) tables in Access, it might take a very long time to open them. Or you might run low on virtual memory and eventually get an ODBC Query Failed error and the table cannot open. To deal with this, select the following options:

    • Return Matching Rows (2)

    • Allow BIG Results (8).

    These add up to a value of 10 (OPTION=10).

Some external articles and tips that may be useful when using Access, ODBC and Connector/ODBC:

22.1.7.2.1.2. Microsoft Excel and Column Types

If you have problems importing data into Microsoft Excel, particularly numeric, date, and time values, this is probably because of a bug in Excel, where the column type of the source data is used to determine the data type when that data is inserted into a cell within the worksheet. The result is that Excel incorrectly identifies the content and this affects both the display format and the data when it is used within calculations.

To address this issue, use the CONCAT() function in your queries. The use of CONCAT() forces Excel to treat the value as a string, which Excel will then parse and usually correctly identify the embedded information.

However, even with this option, some data may be incorrectly formatted, even though the source data remains unchanged. Use the Format Cells option within Excel to change the format of the displayed information.

22.1.7.2.1.3. Microsoft Visual Basic

To be able to update a table, you must define a primary key for the table.

Visual Basic with ADO cannot handle big integers. This means that some queries like SHOW PROCESSLIST do not work properly. The fix is to use OPTION=16384 in the ODBC connect string or to select the Change BIGINT columns to INT option in the Connector/ODBC connect screen. You may also want to select the Return matching rows option.

22.1.7.2.1.4. Microsoft Visual InterDev

If you have a BIGINT in your result, you may get the error [Microsoft][ODBC Driver Manager] Driver does not support this parameter. Try selecting the Change BIGINT columns to INT option in the Connector/ODBC connect screen.

22.1.7.2.1.5. Visual Objects

Select the Don't optimize column widths option.

22.1.7.2.1.6. Microsoft ADO

When you are coding with the ADO API and Connector/ODBC, you need to pay attention to some default properties that aren't supported by the MySQL server. For example, using the CursorLocation Property as adUseServer returns a result of �1 for the RecordCount Property. To have the right value, you need to set this property to adUseClient, as shown in the VB code here:

Dim myconn As New ADODB.ConnectionDim myrs As New RecordsetDim mySQL As StringDim myrows As Longmyconn.Open "DSN=MyODBCsample"mySQL = "SELECT * from user"myrs.Source = mySQLSet myrs.ActiveConnection = myconnmyrs.CursorLocation = adUseClientmyrs.Openmyrows = myrs.RecordCountmyrs.Closemyconn.Close

Another workaround is to use a SELECT COUNT(*) statement for a similar query to get the correct row count.

To find the number of rows affected by a specific SQL statement in ADO, use the RecordsAffected property in the ADO execute method. For more information on the usage of execute method, refer to http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdmthcnnexecute.asp.

For information, see ActiveX Data Objects(ADO) Frequently Asked Questions.

22.1.7.2.1.7. Using Connector/ODBC with Active Server Pages (ASP)

Select the Return matching rows option in the DSN.

For more information about how to access MySQL through ASP using Connector/ODBC, refer to the following articles:

A Frequently Asked Questions list for ASP can be found at http://support.microsoft.com/default.aspx?scid=/Support/ActiveServer/faq/data/adofaq.asp.

22.1.7.2.1.8. Using Connector/ODBC with Visual Basic (ADO, DAO and RDO) and ASP

Some articles that may help with Visual Basic and ASP:

22.1.7.2.2. Using Connector/ODBC with Borland Applications

With all Borland applications where the Borland Database Engine (BDE) is used, follow these steps to improve compatibility:

  • Update to BDE 3.2 or newer.

  • Enable the Don't optimize column widths option in the DSN.

  • Enabled the Return matching rows option in the DSN.

22.1.7.2.2.1. Using Connector/ODBC with Borland Builder 4

When you start a query, you can use the Active property or the Open method. Note that Active starts by automatically issuing a SELECT * FROM ... query. That may not be a good thing if your tables are large.

22.1.7.2.2.2. Using Connector/ODBC with Delphi

Also, here is some potentially useful Delphi code that sets up both an ODBC entry and a BDE entry for Connector/ODBC. The BDE entry requires a BDE Alias Editor that is free at a Delphi Super Page near you. (Thanks to Bryan Brunton <> for this):

fReg:= TRegistry.Create;fReg.OpenKey('\Software\ODBC\ODBC.INI\DocumentsFab', True);fReg.WriteString('Database', 'Documents');fReg.WriteString('Description', ' ');fReg.WriteString('Driver', 'C:\WINNT\System32\myodbc.dll');fReg.WriteString('Flag', '1');fReg.WriteString('Password', '');fReg.WriteString('Port', ' ');fReg.WriteString('Server', 'xmark');fReg.WriteString('User', 'winuser');fReg.OpenKey('\Software\ODBC\ODBC.INI\ODBC Data Sources', True);fReg.WriteString('DocumentsFab', 'MySQL');fReg.CloseKey;fReg.Free;Memo1.Lines.Add('DATABASE NAME=');Memo1.Lines.Add('USER NAME=');Memo1.Lines.Add('ODBC DSN=DocumentsFab');Memo1.Lines.Add('OPEN MODE=READ/WRITE');Memo1.Lines.Add('BATCH COUNT=200');Memo1.Lines.Add('LANGDRIVER=');Memo1.Lines.Add('MAX ROWS=-1');Memo1.Lines.Add('SCHEMA CACHE DIR=');Memo1.Lines.Add('SCHEMA CACHE SIZE=8');Memo1.Lines.Add('SCHEMA CACHE TIME=-1');Memo1.Lines.Add('SQLPASSTHRU MODE=SHARED AUTOCOMMIT');Memo1.Lines.Add('SQLQRYMODE=');Memo1.Lines.Add('ENABLE SCHEMA CACHE=FALSE');Memo1.Lines.Add('ENABLE BCD=FALSE');Memo1.Lines.Add('ROWSET SIZE=20');Memo1.Lines.Add('BLOBS TO CACHE=64');Memo1.Lines.Add('BLOB SIZE=32');AliasEditor.Add('DocumentsFab','MySQL',Memo1.Lines);
22.1.7.2.2.3. Using Connector/ODBC with C++ Builder

Tested with BDE 3.0. The only known problem is that when the table schema changes, query fields are not updated. BDE, however, does not seem to recognize primary keys, only the index named PRIMARY, although this has not been a problem.

22.1.7.2.3. Using Connector/ODBC with ColdFusion

The following information is taken from the ColdFusion documentation:

Use the following information to configure ColdFusion Server for Linux to use the unixODBC driver with Connector/ODBC for MySQL data sources. You can download Connector/ODBC at http://dev.mysql.com/downloads/connector/odbc/.

ColdFusion version 4.5.1 lets you use the ColdFusion Administrator to add the MySQL data source. However, the driver is not included with ColdFusion version 4.5.1. Before the MySQL driver appears in the ODBC data sources drop-down list, build and copy the Connector/ODBC driver to /opt/coldfusion/lib/libmyodbc.so.

The Contrib directory contains the program mydsn-xxx.zip which lets you build and remove the DSN registry file for the Connector/ODBC driver on ColdFusion applications.

For more information and guides on using ColdFusion and Connector/ODBC, see the following external sites:

22.1.7.2.4. Using Connector/ODBC with OpenOffice.org

Open Office (http://www.openoffice.org) How-to: MySQL + OpenOffice. How-to: OpenOffice + MyODBC + unixODBC.

22.1.7.2.5. Using Connector/ODBC with Sambar Server

Sambar Server (http://www.sambarserver.info) How-to: MyODBC + SambarServer + MySQL.

22.1.7.2.6. Using Connector/ODBC with Pervasive Software DataJunction

You have to change it to output VARCHAR rather than ENUM, as it exports the latter in a manner that causes MySQL problems.

22.1.7.2.7. Using Connector/ODBC with SunSystems Vision

Select the Return matching rows option.

22.1.7.3. Connector/ODBC Errors and Resolutions (FAQ)

The following section details some common errors and their suggested fix or alternative solution. If you are still experiencing problems, use the Connector/ODBC mailing list; see Section 22.1.8.1, "Connector/ODBC Community Support".

Many problems can be resolved by upgrading your Connector/ODBC drivers to the latest available release. On Windows, make sure that you have the latest versions of the Microsoft Data Access Components (MDAC) installed.

64-Bit Windows and ODBC Data Source Administrator

I have installed Connector/ODBC on Windows XP x64 Edition or Windows Server 2003 R2 x64. The installation completed successfully, but the Connector/ODBC driver does not appear in ODBC Data Source Administrator.

This is not a bug, but is related to the way Windows x64 editions operate with the ODBC driver. On Windows x64 editions, the Connector/ODBC driver is installed in the %SystemRoot%\SysWOW64 folder. However, the default ODBC Data Source Administrator that is available through the Administrative Tools or Control Panel in Windows x64 Editions is located in the %SystemRoot%\system32 folder, and only searches this folder for ODBC drivers.

On Windows x64 editions, use the ODBC administration tool located at %SystemRoot%\SysWOW64\odbcad32.exe, this will correctly locate the installed Connector/ODBC drivers and enable you to create a Connector/ODBC DSN.

This issue was originally reported as Bug #20301.

Error 10061 (Cannot connect to server)

When connecting or using the Test button in ODBC Data Source Administrator I get error 10061 (Cannot connect to server)

This error can be raised by a number of different issues, including server problems, network problems, and firewall and port blocking problems. For more information, see Section C.5.2.2, "Can't connect to [local] MySQL server".

"Transactions are not enabled" Error

The following error is reported when using transactions: Transactions are not enabled

This error indicates that you are trying to use transactions with a MySQL table that does not support transactions. Transactions are supported within MySQL when using the InnoDB database engine, which is the default storage engine in MySQL 5.5 and higher. In versions of MySQL before MySQL 5.1, you may also use the BDB engine.

Check the following before continuing:

  • Verify that your MySQL server supports a transactional database engine. Use SHOW ENGINES to obtain a list of the available engine types.

  • Verify that the tables you are updating use a transactional database engine.

  • Ensure that you have not enabled the disable transactions option in your DSN.

#DELETED# Records Reported by Access

Access reports records as #DELETED# when inserting or updating records in linked tables.

If the inserted or updated records are shown as #DELETED# in Access, then:

  • If you are using Access 2000, get and install the newest (version 2.6 or higher) Microsoft MDAC (Microsoft Data Access Components) from http://support.microsoft.com/kb/110093. This fixes a bug in Access that when you export data to MySQL, the table and column names aren't specified.

    Also, get and apply the Microsoft Jet 4.0 Service Pack 5 (SP5), which can be found at http://support.microsoft.com/default.aspx?scid=kb;EN-US;q239114. This fixes some cases where columns are marked as #DELETED# in Access.

  • For all versions of Access, enable the Connector/ODBC Return matching rows option. For Access 2.0, also enable the Simulate ODBC 1.0 option.

  • Include a TIMESTAMP in all tables that you want to be able to update.

  • Include a primary key in the table. If not, new or updated rows may show up as #DELETED#.

  • Use only DOUBLE float fields. Access fails when comparing with single-precision floats. The symptom usually is that new or updated rows may show up as #DELETED# or that you cannot find or update rows.

  • If you are using Connector/ODBC to link to a table that has a BIGINT column, the results are displayed as #DELETED. The work around solution is:

    • Have one more dummy column with TIMESTAMP as the data type.

    • Select the Change BIGINT columns to INT option in the connection dialog in ODBC DSN Administrator.

    • Delete the table link from Access and re-create it.

    Old records still display as #DELETED#, but newly added/updated records are displayed properly.

Write Conflicts or Row Location Errors

How do I handle Write Conflicts or Row Location errors?

If you see the following errors, select the Return Matching Rows option in the DSN configuration dialog, or specify OPTION=2, as the connection parameter:

Write Conflict. Another user has changed your data.Row cannot be located for updating. Some values may have been changedsince it was last read.
Importing from Access 97

Exporting data from Access 97 to MySQL reports a Syntax Error.

This error is specific to Access 97 and versions of Connector/ODBC earlier than 3.51.02. Update to the latest version of the Connector/ODBC driver to resolve this problem.

Importing from Microsoft DTS

Exporting data from Microsoft DTS to MySQL reports a Syntax Error.

This error occurs only with MySQL tables using the TEXT or VARCHAR data types. You can fix this error by upgrading your Connector/ODBC driver to version 3.51.02 or higher.

SQL_NO_DATA Exception from ODBC.NET

Using ODBC.NET with Connector/ODBC, while fetching empty string (0 length), it starts giving the SQL_NO_DATA exception.

You can get the patch that addresses this problem from http://support.microsoft.com/default.aspx?scid=kb;EN-US;q319243.

Error with SELECT COUNT(*)

Using SELECT COUNT(*) FROM tbl_name within Visual Basic and ASP returns an error.

This error occurs because the COUNT(*) expression is returning a BIGINT, and ADO cannot make sense of a number this big. Select the Change BIGINT columns to INT option (option value 16384).

Multiple-Step Operation Error

Using the AppendChunk() or GetChunk() ADO methods, the Multiple-step operation generated errors. Check each status value error is returned.

The GetChunk() and AppendChunk() methods from ADO do not work as expected when the cursor location is specified as adUseServer. On the other hand, you can overcome this error by using adUseClient.

A simple example can be found from http://www.dwam.net/iishelp/ado/docs/adomth02_4.htm

Modified Record Error

Access returns Another user had modified the record that you have modified while editing records on a Linked Table.

In most cases, this can be solved by doing one of the following things:

  • Add a primary key for the table if one doesn't exist.

  • Add a timestamp column if one doesn't exist.

  • Only use double-precision float fields. Some programs may fail when they compare single-precision floats.

If these strategies do not help, start by making a log file from the ODBC manager (the log you get when requesting logs from ODBCADMIN) and a Connector/ODBC log to help you figure out why things go wrong. For instructions, see Section 22.1.4.8, "Getting an ODBC Trace File".

Direct Application Linking Under Unix or Linux

When linking an application directly to the Connector/ODBC library under Unix or Linux, the application crashes.

Connector/ODBC under Unix or Linux is not compatible with direct application linking. To connect to an ODBC source, use a driver manager, such as iODBC or unixODBC.

Microsoft Office and DATE or TIMESTAMP Columns

Applications in the Microsoft Office suite cannot update tables that have DATE or TIMESTAMP columns.

This is a known issue with Connector/ODBC. Ensure that the field has a default value (rather than NULL) and that the default value is nonzero (that is, something other than 0000-00-00 00:00:00).

INFORMATION_SCHEMA Database

When connecting Connector/ODBC 5.x to a MySQL 4.x server, the error 1044 Access denied for user 'xxx'@'%' to database 'information_schema' is returned.

Connector/ODBC 5.x is designed to work with MySQL 5.0 or later, taking advantage of the INFORMATION_SCHEMA database to determine data definition information. Support for MySQL 4.1 is planned for the final release.

S1T00 Error

When calling SQLTables, the error S1T00 is returned, but I cannot find this in the list of error numbers for Connector/ODBC.

The S1T00 error indicates that a general timeout has occurred within the ODBC system and is not a MySQL error. Typically it indicates that the connection you are using is stale, the server is too busy to accept your request or that the server has gone away.

"Table does not exist" Error in Access 2000

When linking to tables in Access 2000 and generating links to tables programmatically, rather than through the table designer interface, you may get errors about tables not existing.

There is a known issue with a specific version of the msjet40.dll that exhibits this issue. The version affected is 4.0.9025.0. Reverting to an older version will enable you to create the links. If you have recently updated your version, check your WINDOWS directory for the older version of the file and copy it to the drivers directory.

Batched Statements

When I try to use batched statements, the execution of the batched statements fails.

Batched statement support was added in 3.51.18. Support for batched statements is not enabled by default. Enable option FLAG_MULTI_STATEMENTS, value 67108864, or select the Allow multiple statements flag within a GUI configuration.

Packet Errors with ADODB and Excel

When connecting to a MySQL server using ADODB and Excel, occasionally the application fails to communicate with the server and the error Got an error reading communication packets appears in the error log.

This error may be related to Keyboard Logger 1.1 from PanteraSoft.com, which is known to interfere with the network communication between MySQL Connector/ODBC and MySQL.

Outer Join Error

When using some applications to access a MySQL server using Connector/ODBC and outer joins, an error is reported regarding the Outer Join Escape Sequence.

This is a known issue with MySQL Connector/ODBC which is not correctly parsing the "Outer Join Escape Sequence", as per the specs at Microsoft ODBC Specs. Currently, Connector/ODBC will return a value > 0 when asked for SQL_OJ_CAPABILITIES even though no parsing takes place in the driver to handle the outer join escape sequence.

Hebrew/CJK Characters

I can correctly store extended characters in the database (Hebrew/CJK) using Connector/ODBC 5.1, but when I retrieve the data, the text is not formatted correctly and I get garbled characters.

When using ASP and UTF8 characters, add the following to your ASP files to ensure that the data returned is correctly encoded:

Response.CodePage = 65001Response.CharSet = "utf-8"
Duplicate Entry in Installed Programs List

I have a duplicate MySQL Connector/ODBC entry within my Installed Programs list, but I cannot delete one of them.

This problem can occur when you upgrade an existing Connector/ODBC installation, rather than removing and then installing the updated version.

Warning

To fix the problem, use any working uninstallers to remove existing installations; then may have to edit the contents of the registry. Make sure you have a backup of your registry information before attempting any editing of the registry contents.

Values Truncated to 255 Characters

When submitting queries with parameter binding using UPDATE, my field values are being truncated to 255 characters.

Ensure that the FLAG_BIG_PACKETS option is set for your connection. This removes the 255 character limitation on bound parameters.

Disabling Data-At-Execution

Is it possible to disable data-at-execution using a flag?

If you do not want to use data-at-execution, remove the corresponding calls. For example:

SQLLEN ylen = SQL_LEN_DATA_AT_EXEC(10);SQLBindCol(hstmt,2,SQL_C_BINARY, buf, 10, &ylen);

Would become:

SQLBindCol(hstmt,2,SQL_C_BINARY, buf, 10, NULL);

Note that in the call to SQLBindCol(), &ylen has been replaced by NULL.

For further information, refer to the MSDN documentation for SQLBindCol().

NULLABLE Attribute for AUTO_INCREMENT Columns

When you call SQLColumns() for a table column that is AUTO_INCREMENT, the NULLABLE column of the result set is always SQL_NULLABLE (1).

This is because MySQL reports the DEFAULT value for such a column as NULL. It means, if you insert a NULL value into the column, you will get the next integer value for the table's auto_increment counter.

22.1.8. Connector/ODBC Support

There are many different places where you can get support for using Connector/ODBC. Always try the Connector/ODBC Mailing List or Connector/ODBC Forum. See Section 22.1.8.1, "Connector/ODBC Community Support", for help before reporting a specific bug or issue to MySQL.

22.1.8.1. Connector/ODBC Community Support

Oracle provides assistance to the user community by means of its mailing lists. For Connector/ODBC-related issues, you can get help from experienced users by using the <> mailing list. Archives are available online at http://lists.mysql.com/myodbc.

For information about subscribing to MySQL mailing lists or to browse list archives, visit http://lists.mysql.com/. See Section 1.6.1, "MySQL Mailing Lists".

Community support from experienced users is also available through the ODBC Forum. You may also find help from other users in the other MySQL Forums, located at http://forums.mysql.com. See Section 1.6.2, "MySQL Community Support at the MySQL Forums".

22.1.8.2. How to Report Connector/ODBC Problems or Bugs

If you encounter difficulties or problems with Connector/ODBC, start by making a log file from the ODBC Manager (the log you get when requesting logs from ODBC ADMIN) and Connector/ODBC. The procedure for doing this is described in Section 22.1.4.8, "Getting an ODBC Trace File".

Check the Connector/ODBC trace file to find out what could be wrong. Determine what statements were issued by searching for the string >mysql_real_query in the myodbc.log file.

Also, try issuing the statements from the mysql client program or from admndemo. This helps you determine whether the error is in Connector/ODBC or MySQL.

If you find out something is wrong, please only send the relevant rows (maximum 40 rows) to the myodbc mailing list. See Section 1.6.1, "MySQL Mailing Lists". Please never send the whole Connector/ODBC or ODBC log file!

Ideally, include the following information with the email:

  • Operating system and version

  • Connector/ODBC version

  • ODBC Driver Manager type and version

  • MySQL server version

  • ODBC trace from Driver Manager

  • Connector/ODBC log file from Connector/ODBC driver

  • Simple reproducible sample

Remember that the more information you can supply to us, the more likely it is that we can fix the problem!

Also, before posting the bug, check the MyODBC mailing list archive at http://lists.mysql.com/myodbc.

If you are unable to find out what is wrong, the last option is to create an archive in tar or zip format that contains a Connector/ODBC trace file, the ODBC log file, and a README file that explains the problem. Initiate a bug report for our bugs database at http://bugs.mysql.com/, then click the Files tab in the bug report for instructions on uploading the archive to the bugs database. Only MySQL engineers have access to the files you upload, and we are very discreet with the data.

If you can create a program that also demonstrates the problem, please include it in the archive as well.

If the program works with another SQL server, include an ODBC log file where you perform exactly the same SQL statements so that we can compare the results between the two systems.

Remember that the more information you can supply to us, the more likely it is that we can fix the problem.

22.1.8.3. How to Submit a Connector/ODBC Patch

You can send a patch or suggest a better solution for any existing code or problems by sending a mail message to <>.

Copyright © 1997, 2013, Oracle and/or its affiliates. All rights reserved. Legal Notices
(Sebelumnya) 21. MySQL Performance Schema22.2. MySQL Connector/Net (Berikutnya)