实践出来: mysql通过安装配置向导重新配置时,选择utf8时,命令模式下在已创建的数据库中建表时,该表的字段字符不受影响(还是按照重新配置之前的字符)。而新创建的数据库中建的表,字段的字符就为utf8(即重新配置后的字符),并可以插入中文字段的值。phpMyadmin软件管理mysql时,显示的mysql字符集为UTF-8
Unicode(utf8) 再将通过配置向导重新配置时,选择gbk时,命令模式下,在已创建的数据库中建表时,该表的字段字符不受影响(还是按照重新配置之前的字符)。而新创建的数据库中建的表,字段的字符就为gbk(即重新配置后的字符),并可以插入中文字段的值。phpMyadmin软件管理mysql时,显示的mysql字符集为UTF-8
Unicode(utf8)
当然,也可以在创建表时,不按默认的字符集来,可以手工指定表的字符集。如: Mysql> use book; Mysql>create table test3( id tinyint(2) unsigned not null auto_increment, name varchar(14) not null, email varchar(30), primary key(id) ) DEFAULT CHARSET=utf8;
1、如果在命令行模式下,执行查询语句,中文显示为乱码时,可以使用如下命令临时将显示的乱码解决掉 mysql> set names gbk; 或 mysql>set names utf8; 其中gbk或utf8是数据库字符集。 它相当于下面的三句指令: SET character_set_client = gbk; SET character_set_results = gbk; SET character_set_connection = gbk; 查看某一个数据库的结构信息及字符集相关信息,使用命令: mysql>status; 2、在windows下,命令行模式下,查看数据库的编码方式命令是: MySQL的默认编码是Latin1,不支持中文,要支持中文需要把数据库的默认编码修改为gbk或者utf8。 MySQL 4.1 对于字符集的指定可以细化到一台机器上安装的 MySQL,其中的一个数据库,其中的一张表,其中的一栏,应该用什么字符集。但是,传统的 Web 程序在创建数据库和数据表时并没有使用那么复杂的配置,它们用的是默认的配置,那么,默认的配置从何而来呢? 编译 MySQL 时,指定了一个默认的字符集,这个字符集是 latin1; 安装 MySQL 时,可以在配置文件 (my.ini) 中指定一个默认的的字符集,如果没指定,这个值继承自编译时指定的; 启动 mysqld 时,可以在命令行参数中指定一个默认的的字符集,如果没指定,这个值继承自配置文件中的; 此时 character_set_server 被设定为这个默认的字符集; 当创建一个新的数据库时,除非明确指定,这个数据库的字符集被缺省设定为 character_set_server; 当选定了一个数据库时,character_set_database 被设定为这个数据库默认的字符集; 在这个数据库里创建一张表时,表默认的字符集被设定为 character_set_database,也就是这个数据库默认的字符集; 当在表内设置一栏时,除非明确指定,否则此栏缺省的字符集就是表默认的字符集; 这个字符集就是数据库中实际存储数据采用的字符集,mysqldump 出来的内容就是这个字符集下的; 当我们按照原来的方式通过PHP存取MySQL数据库时,就算设置了表的默认字符集为utf8并且通过UTF-8编码发送查询,你会发现存入数据库的仍然是乱码。问题就出在这个connection连接层上。 想要进行“正确”的存储和得到“正确”的结果,最方便的是在所有query开始之前执行一下: SET NAMES 'gbk'; 其中gbk是数据库字符集。 它相当于下面的三句指令: SET character_set_client = gbk; SET character_set_results = gbk; SET character_set_connection = gbk; 4.1和5.0默认使用的是latin1字符集(木头:妈的,老外真霸道,妄想让全世界都是使用瑞典字符集吗) 如果我们只想使用gbk字符集存储和获取数据, 我们在编译mysql 4.1和 5.0的时候,需要注意在my.ini或者my.cnf中添加两处参数
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/ | +--------------------------+----------------------------+
从以上信息可知数据库的编码为latin1,需要修改为gbk或者是utf8;
其中, character_set_client为客户端编码方式;
character_set_connection为建立连接使用的编码; character_set_database数据库的编码; character_set_results结果集的编码;
character_set_server数据库服务器的编码;
只要保证以上几个采用的编码方式一样,就不会出现乱码问题。
另一个查看数据库编码的命令:
>show variables like 'collation%’;
3、linux系统下,修改MySQL数据库默认编码的步骤为:
a) 停止MySQL的运行
/etc/init.d/mysql start (stop) 为启动和停止服务器 b)
var/lib/mysql/
放置的是数据库表文件夹,这里的mysql相当于windows下mysql的date文件夹
c)
找到客户端配置[client] 在下面添加 default-character-set=utf8 默认字符集为utf8 在找到[mysqld] 添加 default-character-set=utf8 默认字符集为utf8 init_connect='SET NAMES utf8' (设定连接mysql数据库时使用utf8编码,以让mysql数据库为utf8运行) 修改好后,重新启动mysql 即可,重新查询数据库编码可发现编码方式的改变: >show variables like 'character%';
+--------------------------+----------------------------+ | 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 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 此方法用于标准mysql版本同样有效,对于/etc/my.cnf文件,需要从mysql/support-files的文件夹cp my-large.cnf一份到/etc/my.cnf 补充:windows系统下可以删除MySQL数据库,并重新安装,在安装过程中可以直接用Mysql Server
Instance Config Wizard 进行设置
当MySQL数据库服务器已经有数据不适合删除重装时,可以个别指定数据库的编码方式。MySQL指定编码的方式是非常灵活并多样化的,可以指定表级别的编码,行级别编码,甚至可以指定字段级别的编码。
以下示例给出创建数据库时指定编码的两种方式:
1)CREATE
2)create
5、如果你采用的是外部接入的方式,可以在连接中确定请求的编码格式如:jdbc:mysql://localhost:3306
/mysql?useUnicode=true&characterEncoding=utf-8(注意:不要出现任何空格,否则出错)
6、执行脚本:指定编码格式set names gbk(注意,不是UTF-8)可以修改
执行前:
执行后:
从执行命令前后可知,set names
gbk只可以修改character_set_client、character_set_connection、
character_set_results的编码方式,并且这种修改是窗口级别的,只针对本窗口有效,打开另外一个窗口修改无效。也可发现数据库底层的编码方式没有改变,插入数据后还是以utf8编码方式保持。 ************************************************************************************************************************************************************************************************************ 一、查看 MySQL 数据库服务器和数据库字符集。 mysql> show variables like '%char%'; mysql> show table status from sqlstudy_db like '%countries%'; mysql> show full columns from countries; mysql> show charset;
Liunx下修改MySQL字符集: /usr/share/mysql/my-innodb-heavy-4G.cnf 2. 拷贝 small.cnf、my-medium.cnf、my-huge.cnf、my-innodb-heavy-4G.cnf其中的一个到/etc下,命名为my.cnf 3. 修改my.cnf 4.重新启动MySQL 其他的一些设置方法: 修改数据库的字符集 通过配置文件修改: 通过MySQL命令行修改: |
|