mysql 中 字符设置

Mysql关于字符集的变量有


SQL:  show variables like '%character%'

+--------------------------+-----------------------------------------------+
| Variable_name            | Value                                         |
+--------------------------+-----------------------------------------------+
| character_set_client     | gbk                                           |
| character_set_connection | gbk                                           |
| character_set_database   | utf8                                          |
| character_set_filesystem | binary                                        |
| character_set_results    | gbk                                           |
| character_set_server     | latin1                                        |
| character_set_system     | utf8                                          |
| character_sets_dir       | D:\wamp\bin\mysql\mysql5.5.16\share\charsets\ |
+--------------------------+-----------------------------------------------+


上面就是所有关于Mysql中字符集的设置,相信弄懂的了上面的变量的含义,就再也不会有什么数据乱码的烦恼了吧

character_set_client,character_set_connection,character_set_result

这三个变量, 分别告诉MySQL 客户端的编码集, 在传输给MySQL服务器的时候的编码集, 以及期望MySQL返回的结果的编码集,

我们要想得到正确编码的数据,首它们的编码集应该一样,而设置编码上面三个变量编码集一样有一个快捷方法:

set names utf8

执行上面的那个命令,可以一次将 character_set_client,character_set_connection,character_set_result 

三个变量都设置成 UTF-8 的编码,

然后我们要得到正解编码的数据,还要知道数据库的编码方法,也就是上面设置的 character_set_database,这只是数据库的默认编码,而

我们知道存放数据的是表,所以我们要以表中的字符为基准,如果不设置表的字符集的话,会继承数据库字符集

所以如果数据库出现乱码的情况下,我们就看一下上面的四种情况下的编码是不是一样


对于Java中,执行Set names utf8 并不以解决乱码问题,而其中解决的办法是改变连接串,在连接字符串中指定字符集:

conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/xsgl?useUnicode=true&characterEncoding=UTF-8","root","root");


这个字符集指定的是character_set_client  ;character_set_connection 的编码是utf8,而并没有指定 character_set_results 的编码为空,

所以现在存放数据库应该没问题,但如果取出,还要将 character_set_results 的编码与应用程序的编码(控制台、Java等)相同 

http://hi.baidu.com/dburu/blog/item/67b0958bff8b5fdbfd1f108c.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL 字符可以分为服务器层面的字符数据库层面的字符。服务器层面的字符是指 MySQL 服务器对客户端请求的字符进行处理的规则,而数据库层面的字符是指数据库存储数据所使用的字符MySQL字符设置是层次结构的,包括以下几个层次: 1. 服务器层面的字符:可以在 MySQL 配置文件设置,默认为 latin1。 2. 数据库层面的字符:可以为每个数据库设置不同的字符。 3. 数据表层面的字符:可以为每个数据表设置不同的字符。 4. 字段层面的字符:可以为每个字段设置不同的字符。 在设置字符时,应该注意以下几点: 1. 服务器层面的字符数据库层面的字符应该保持一致,否则会出现乱码。 2. 数据表层面的字符字段层面的字符可以不同,但是应该保证字段层面的字符是数据表层面字符的子。 3. 在创建数据库、数据表和字段时,如果没有指定字符MySQL 会使用默认的字符。 4. 在对数据进行操作时,应该使用与数据表和字段相同的字符,否则会出现乱码。 可以通过以下语句来设置 MySQL 字符: 1. 设置服务器层面的字符: ``` [mysqld] character_set_server=utf8 ``` 2. 设置数据库层面的字符: ``` CREATE DATABASE db_name CHARACTER SET utf8; ``` 3. 设置数据表层面的字符: ``` CREATE TABLE table_name( column_name VARCHAR(255) CHARACTER SET utf8, ... ); ``` 4. 设置字段层面的字符: ``` ALTER TABLE table_name MODIFY column_name VARCHAR(255) CHARACTER SET utf8; ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值