druid mysql 乱码_2017.02.21   Mysql 字符集 乱码 排错过程

1,命令行确保以下字符集一致

*1, shell的字符集

*2, connect的字符集

*3, server的字符集

*4, database, table 字符集

MySQL API 编程,命令行确保以下字符集一致

*1, code的字符集

*2, set names utf8

*3, database, table字符集

以下是调用 MySQL API  范例

zhouss@zhouss-Shangqi-X4650/tmp/test$ cat main.c

/*

*1, shell的字符集

*2, connect的字符集

*3, server的字符集

*4, database, table 字符集

*

*1, code的字符集

*2, set names utf8

*3, database, table字符集

* */

#include 

#include 

#include 

#include 

int main(int argc, char **argv)

{

int       lRet          = 0;

int       lLoop         = 0;

int       lPos          = 0;

int       lColumnNum    = 0;

MYSQL     *hMySQLConnect= NULL;

MYSQL_ROW ppstRow       = NULL;

MYSQL_RES *result       = NULL;

MYSQL_FIELD *fields     = NULL;

char      *pszHost      = "localhost";

char      *pszUser      = "root";

char      *pszPass      = "password"; /* 如果是空,就是空字符   */

char      *pszDB        = "mysql";

char      szBuffer[2048]= {0};

char      *ppszQuery[]  = {

"SET NAMES UTF8",

"DROP   DATABASE IF EXISTS StudentDB",

"CREATE DATABASE StudentDB CHARACTER SET utf8",

"USE StudentDB",

"CREATE TABLE student(id int(2) PRIMARY KEY auto_increment, name varchar(50), email varchar(100)) DEFAULT CHARSET=utf8",

"INSERT INTO student VALUES(1, '老王', 'laowang@mail.com')",

"INSERT INTO student VALUES(2, '张三', 'zhangsan@gmail.com')",

"INSERT INTO student VALUES(3, '李四', 'lisi@outlook.com')",

"INSERT INTO student VALUES(4, '李刚', 'ligang@qq.com')",

"INSERT INTO student(name, email) VALUES('刘翔', 'liuxiang@yview.cn')",

"select * from student",

"update student set email='liuxiang@cctv.com' where name='刘翔'",

"delete from student where name='李四'",

"select * from student",

NULL

};

/* 1, 初始化MySQL handle  */

hMySQLConnect = mysql_init(NULL) ;

if (NULL == hMySQLConnect)

{

lRet =  mysql_errno(hMySQLConnect) ;

printf("MySQL初始化失败 \n");

return lRet;

}

printf( "MySQL初始化成功 \n");

/* 2, 链接远程MySQL服务器  */

/* MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag) */

hMySQLConnect = mysql_real_connect(hMySQLConnect, pszHost, pszUser, pszPass, pszDB, 0, NULL, 0);

if (NULL == hMySQLConnect)

{

lRet =  mysql_errno(hMySQLConnect) ;

printf( "MySQL链接失败 \n");

return lRet;

}

printf( "连接远程MySQL成功 \n");

/* 3, 主循环业务 */

while (1)

{

memset(szBuffer, 0, sizeof(szBuffer));

if( NULL == ppszQuery[lPos] ||

0 == strncmp(ppszQuery[lPos] , "exit" , 4) ||

0 == strncmp(ppszQuery[lPos] , "EXIT" , 4) )

{

break;

}

/* exec SqlQuery  */

strncpy(szBuffer, ppszQuery[lPos++], sizeof(szBuffer));

lRet = mysql_query(hMySQLConnect, szBuffer);

if (0 != lRet)

{

lRet =  mysql_errno(hMySQLConnect) ;

fprintf( stderr, "MySQL 查询失败 \n");

return lRet;

}

/* select ?   */

if (0 == strncmp("select", szBuffer, 6) || 0 == strncmp("SELECT", szBuffer, 6))

{

result = mysql_store_result(hMySQLConnect);

if(NULL == result)

{

break;

}

/* 输出字段名  */

lColumnNum = mysql_field_count(hMySQLConnect) ;

fields = mysql_fetch_fields(result);

memset(szBuffer, 0, sizeof(szBuffer));

for (lLoop = 0; lLoop 

{

strcat(szBuffer, fields[lLoop].name);

strcat(szBuffer, "    ");

}

printf( "%s \n", szBuffer);

/* 输出每行   */

while ((ppstRow = mysql_fetch_row(result)))

{

memset(szBuffer, 0, sizeof(szBuffer));

for (lLoop = 0; lLoop 

{

strcat(szBuffer, ppstRow[lLoop]);

strcat(szBuffer, "    ");

}

printf( "%s \n", szBuffer);

}

mysql_free_result(result);

}

}

/* 关闭MySQL handle */

mysql_close(hMySQLConnect);

printf( "离开MySQL \n");

return lRet;

}

zhouss@zhouss-Shangqi-X4650/tmp/test$ gcc main.c -L /usr/lib/x86_64-linux-gnu/ -lmysqlclient  && ./a.out

MySQL初始化成功

连接远程MySQL成功

id    name    email

1    老王    laowang@mail.com

2    张三    zhangsan@gmail.com

3    李四    lisi@outlook.com

4    李刚    ligang@qq.com

5    刘翔    liuxiang@yview.cn

id    name    email

1    老王    laowang@mail.com

2    张三    zhangsan@gmail.com

4    李刚    ligang@qq.com

5    刘翔    liuxiang@cctv.com

离开MySQL

zhouss@zhouss-Shangqi-X4650/tmp/test$ mysql -hlocalhost  -uroot -p

Enter password:

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 19

Server version: 5.7.17-0ubuntu0.16.04.1 (Ubuntu)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show variables like 'character%';

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

| Variable_name            | Value                      |

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

| character_set_client     | utf8                       |

| character_set_connection | utf8                       |

| character_set_database   | latin1                     |

| character_set_filesystem | binary                     |

| character_set_results    | utf8                       |

| character_set_server     | latin1                     |

| character_set_system     | utf8                       |

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

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

8 rows in set (0.01 sec)

mysql> select * from StudentDB.student;

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

| id | name   | email              |

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

|  1 | 老王   | laowang@mail.com   |

|  2 | 张三   | zhangsan@gmail.com |

|  4 | 李刚   | ligang@qq.com      |

|  5 | 刘翔   | liuxiang@cctv.com  |

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

4 rows in set (0.00 sec)

mysql> ^DBye

zhouss@zhouss-Shangqi-X4650/tmp/test$

set names utf8都作了什么?mysql> show variables like 'character%';

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

| Variable_name            | Value                      |

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

| character_set_client     | latin1                     |

| character_set_connection | latin1                     |

| character_set_database   | latin1                     |

| character_set_filesystem | binary                     |

| character_set_results    | latin1                     |

| character_set_server     | latin1                     |

| character_set_system     | utf8                       |

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

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

8 rows in set (0.01 sec)

mysql> SET NAMES UTF8;

Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'character%';

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

| Variable_name            | Value                      |

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

| character_set_client     | utf8                       |

| character_set_connection | utf8                       |

| character_set_database   | latin1                     |

| character_set_filesystem | binary                     |

| character_set_results    | utf8                       |

| character_set_server     | latin1                     |

| character_set_system     | utf8                       |

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

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

8 rows in set (0.01 sec)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值