mysql不识别⽣僻字_MySQL⽣僻字(不常⽤字)的完整解决
⽅案
查看 MySQL 数据库服务器和数据库字符集
show variables like '%char%';
查看 MySQL 数据表(table) 的字符集
show table status from sqlstudy_db like '%countries%';
查看 MySQL 数据列(column)的字符集
show full columns from countries;
查看当前安装的 MySQL 所⽀持的字符集
show charset;
show char set;
MySQL的字符编码设置可以划分为三个层次,依据具体情况可以在数据库、数据表和字段三个级别进⾏实验:
SET utf8 COLLATE utf8_general_ci
SET gbk COLLATE gbk_chinese_ci
1、MySQL数据库字符编码全局设置;
语句:ALTER DATABASE `数据库名` DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci
2、MySQL数据表字符编码设置;
语句:ALTER TABLE `表名` DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci
3、MySQL数据表字段字符编码设置;
语句:ALTER TABLE `表名` CHANGE `字段名` `字段名` 字段类型(长度) CHARACTER SET gbk COLLATE gbk_chinese_ci NULL DEFAULT NULL
注意:请在执⾏查询之前,执⾏:SET NAMES gbk
//
第⼀次采⽤MySQL作为业务应⽤的数据库,由于经验不够丰富,在安装数据库的时候选择了GB2312编码。
起先⽤的也算得⼼应⼿,然⽽后续发现了⽣僻字不能显⽰的情况,把我搞得焦头烂额。经过好⼏天的摸索、
学习,终于把问题解决了。记下解决步骤,与跟我⼀样的新⼿分享。
步骤⼀: 分析出现乱码的原因
由于GB2312字符集只收录了6763个汉字,导致⼀些⽣僻字⽆法正常显⽰。
步骤⼆:确定解决⽅法
把字符集由GB2312改成GBK。但是由于不能丢弃之前的数据,如何修改MySQL的字符集成了关键。
步骤三:字符集的修改
a. 先导出表结构
mysqldump -u root -p --default-character-set=gbk -d 数据库名 > createdb.sql
其中参数-d表⽰只导出表结构,不导出数据。
b. 打开createdb.sql,⼿⼯把gb2312替换成gbk。
c. 导出所有记录
mysql下载不了什么原因mysqldump -u root -p --quick --no-create-info --extended-insert --default-character-set=gb2312 数据库名 > data.sql
其中参数--no-create-info表⽰不⽣成建表语句;--default-character-set=gb2312表⽰按照原来字符集导出所有数据。
d. 打开data.sql,⼿⼯把SET NAME gb2312改成SET NAME gbk。
注意:如果data.sql很⼤,可能需要⼀些替换⼯具来完成替换操作,否则可以直接⽤UltraEdit之类的编辑⼯具打开修改。
e. 在新的服务器上创建表,执⾏createdb.sql。
mysql -u root -p 数据库名 < createdb.sql
f. 导⼊数据,执⾏data.sql
mysql -u root -p 数据库名 < data.sql
g. 创建数据库⽤户。
到这⼉已经完成了数据库字符集从gb2312到gbk的修改,接下去可以登录数据库,⼿⼯把显⽰为"?"的乱码字重新更新⼀下。
看看是不是⼤功告成了!
///
这⼏天查了很多关于mysql对中⽂字符编码的处理,读了各种零散的⽂章,最后做了全⾯的总结,现和⼤家分享:
字符编码
MySQL字符编码 GBK、GB2312、UTF8区
别:kongjian.baidu/wangzhe1945/blog/item/4a69226d4a095cf0421694e1.html
1.系统编码
>show variables like '%character%';
mysql> show variables like '%collation%';
改变系统编码:修改myf(/etc/myf)中默认的编码选项[mysqld]下添加default-charcter-set=utf8 mysql 5.5以上版本换成了character-set-server=utf8 重新启动mysql
命令形式 mysql> SET NAMES 'utf8'; 重新启动mysql的时候所有的设置将失效
2.数据库编码
查看数据库编码: mysql> show create database db_name;
修改数据库编码: mysql> ALTER DATABASE db_name ####这⾥修改整个数据库的编码
CHARACTER SET utf8
DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci
DEFAULT COLLATE utf8_general_ci;
在在建数据库的时候指定编码:
mysql> CREATE DATABASE db_name
CHARACTER SET utf8
DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci
DEFAULT COLLATE utf8_general_ci ;
3.数据库表和字段编码
查看数据库表和字段编码: mysql> show create table table_name;
>ALTER TABLE table_name DEFAULT CHARACTER SET utf8;
修改字段编码: mysql> ALTER TABLE `table_name` CHANGE `dd` `dd` VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL 该命令就是将MYSQL数据库table_name表中 dd的字段编码改为utf8
4.命令⾏下插⼊汉字时指定编码:mysql> set names utf8; 有时候这⼀句很关键!
mysql> insert into test(name) values('王东伟');
总之,不管采⽤那⼀种编码⽅式,只要做到完全统⼀将能达到相应的效果。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论