2 messages in com.mysql.lists.bugsMysql C API character set
FromSent OnAttachments
He, Gang12 Apr 2006 05:42 
Valeriy Kravchuk14 Apr 2006 11:59 
Subject:Mysql C API character set
From:He, Gang (Gang@ca.com)
Date:04/12/2006 05:42:30 AM
List:com.mysql.lists.bugs

Hi,

I install MySQL server 4.1.12 in Redhat Linux in Japanese environment ( env LANG=ja_JP.UTF-8 ),

I setup MySQL server utf8 character set, the configuration is as follows:

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

# Default to using old password format for compatibility with mysql 3.x

# clients (those using the mysqlclient10 compatibility package).

old_passwords=1

default-character-set=utf8

[mysql.server]

user=mysql

basedir=/var/lib

[mysqld_safe]

err-log=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

Then, I start MySQL server, and type mysql command, the result is as follows:

mysql> show variables like 'char%';

+--------------------------+----------------------------------------+

| Variable_name | Value |

+--------------------------+----------------------------------------+

| character_set_client | utf8 |

| character_set_connection | utf8 |

| character_set_database | utf8 |

| character_set_results | utf8 |

| character_set_server | utf8 |

| character_set_system | utf8 |

| character_sets_dir | /usr/local/mysql/share/mysql/charsets/ |

+--------------------------+----------------------------------------+

7 rows in set (0.00 sec)

But, I write a sample code using MySQL C API 4.1.10, the code is as follows:

int main(int argc, char* argv[])

{

MYSQL m_conn;

MYSQL_RES *res;

MYSQL_ROW row;

mysql_init(&m_conn);

mysql_real_connect(&m_conn, "localhost", "root", "123456", "mysql", 0, NULL, 0);

mysql_query(&m_conn, "show variables like 'character_set_%'");

res=mysql_store_result(&m_conn);

while((row=mysql_fetch_row(res))!=NULL)

{

printf(row[0]); printf("\t"); printf(row[1]);

printf("\n");

}

mysql_free_result(res);

mysql_close(&m_conn);

return 0;

}

The output result is as follows:

character_set_client latin1

character_set_connection latin1

character_set_database utf8

character_set_results latin1

character_set_server utf8

character_set_system utf8

character_sets_dir /usr/local/mysql/share/mysql/charsets/

I want to why character_set_client , character_set_connection and character_set_results in the output result be latin1, not utf8 ?

If I want to change MySQL C API default value when the application call mysql_real_connect() function, what I should do ?

Can I change MySQL C API default value via modifying '/etc/my.cnf ' configuration file ? ( I think that the best way is to modify configuration file )

Thanks

Gang