c++ linux 如何把 char* 里面的中文 insert进入mysql(相应的字段为varchar类型)

来源:互联网 发布:武汉农村商业银行网络 编辑:程序博客网 时间:2024/05/29 11:36

首先,  show variables like 'char%';来检查字符集:

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1               |
| character_set_database   | utf8                   |
| character_set_filesystem | binary               |
| character_set_results    | latin1                   |
| character_set_server     | utf8                       |
| character_set_system     | utf8                     |

 

其次,修改方式有两个:

第一种,单次有效,直接在mysql命令行输入:set names 'utf8';

第二种,永久有效,在my.cnf配置:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
default-character-set=utf8
[mysql.server]
default-character-set=utf8
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
default-character-set=utf8
[client]
default-character-set=utf8

 

原理讲解:

mysql内部会有多次字符集的转换:

第一次mysql客户端到mysql connection的转换,第二次mysql connection到mysql server的转换;

所有上面第一张表的Variable_name经过那两种配置方式后,就变成了:

mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                 |
| character_set_database   | utf8                  |
| character_set_filesystem | binary               |
| character_set_results    | utf8                      |
| character_set_server     | utf8                      |

原创粉丝点击