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. 导出所有记录
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区别:http://kongjian.baidu.com/wangzhe1945/blog/item/4a69226d4a095cf0421694e1.html
1.系统编码
>show variables like '%character%';
mysql> show variables like '%collation%';
改变系统编码:修改my.cnf(/etc/my.cnf)中默认的编码选项[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('王东伟');
总之,不管采用那一种编码方式,只要做到完全统一将能达到相应的效果。
MySQL生僻字(不常用字)的完整解决方案的更多相关文章
- Android上显示生僻字的方法
安卓5.0+是可以显示所有(8万多个)Unicode汉字的,本文介绍显示生僻汉字的方法,这个方法也适用于其它特殊字符. Unicode值在0xFFFF以下的(2万多个简体.繁体)汉字早已被广泛支持,所 ...
- mysql中Incorrect string value乱码问题解决方案
mysql中Incorrect string value乱码问题解决方案 你是否遇到过类似以下错误? java.sql.SQLException: Incorrect string value: ...
- 使用UTF8字符集存储中文生僻字
使用UTF8字符集存储中文生僻字 一.相关学习BLOG https://www.cnblogs.com/jyzhao/p/8654412.html http://blog.itpub.net/7818 ...
- WebAPI2使用AutoFac依赖注入完整解决方案。
WebApi2上进行依赖注入,在百度里能搜到的的完整解决方案的文章少之又少,缺胳膊断腿. 和MVC5依赖注入的不同之处,并且需要注意的地方,标记在注释当中.上Global代码: namespace S ...
- 曲演杂坛--特殊字符/生僻字与varchar
对于中文版的SQL SERVER,默认安装后使用的默认排序规则为Chinese_PRC_CI_AS,在此排序规则下,使用varchar类型来可以“正常存取”存放中文字符以及一些东南亚国家的字符,同时v ...
- Duang的成长——使用造字程序输入生僻字
使用造字程序输入生僻字 最近,一个字突然间火了起来,那就是——duang! (图片来自网络) 那么,问题来了!造字程序哪家强?(此处有掌声) 其实,微软早就考虑到各国文字的博大精深,在系统中集成了一个 ...
- php 汉字转拼音 [包含20902个基本汉字+5059生僻字]
原文:php 汉字转拼音 [包含20902个基本汉字+5059生僻字] 昨天在转换拼音的时候发现个bug,有好多字都无法转换,不过也不能怪他,毕竟人家的库才8k,应该只有常用的.无奈上网找了下,发现一 ...
- C/S应用升级更新完整解决方案
年末福利,C/S应用升级更新完整解决方案放送 程序员,工作累寿命短,大家应该学会分享,别浪费有限的生命与健康做重复的事情. C/S方式实现的应用有个升级更新功能是必需的,以前整过一个但是没考虑多套C/ ...
- 利用JFreeChart绘制股票K线图完整解决方案
http://blog.sina.com.cn/s/blog_4ad042e50100q7d9.html 利用JFreeChart绘制股票K线图完整解决方案 (2011-04-30 13:27:17) ...
随机推荐
- 导出csv文件
protected void Button1_Click(object sender, EventArgs e) { DataTable dt = new DataTable( ...
- sql Server 触发器 调用java.
在这里,通过 xp_cmdshell 调用java程序. 步骤: 1)开启 xp_cmdshell(sql Server 2008): 通过如下命令开启: -- To allow advanced o ...
- RABBITMQ安装注意点
关于 RABBITMQ的配置问题安装问题windows7 和window 10我都试了windows10安装和配置不要出现中文和空格,不然你日寒飞的心都有了ERLANG的安装也是Win7直接默认的路径 ...
- Oracle 11g服务
成功安装Oracle 11g后,共有7个服务, 这七个服务的含义分别为: 1. Oracle ORCL VSS Writer Service: Oracle卷映射拷贝写入服务,VSS(Volume S ...
- SQL语句like子句中的转义符 [转载]
如果想在SQL LIKE里查询有下划线'_'或是'%'等值的记录,直接写成like 'XXX_XX',则会把'_'当成是like的通配符.SQL里提供了 escape子句来处理这种情况,escape可 ...
- 选取两个有序数组中最大的K个值,降序存入另一个数组中
原题: 假设有两个有序的整型数组int *a1, int *a2,长度分别为m和n.试用C语言写出一个函数选取两个数组中最大的K个值(K可能大于m+n)写到int *a3中,保持a3降序,并返回a3实 ...
- 分享一个自己写的基于TP的关系模型(2)
1.增加多对多关系的处理 /** * 定义关系 * @return array */ public function test4(){ //参数说明 //关联的模型 //主表关联字段 //关联中间表 ...
- 过滤HTML
过滤HTML public static string NoHTML(string html){ string[] strArray2 = new string[] { "font" ...
- apache 网址重定向
参考了以下网站,终于基本搞定b2c网站伪静态.剩下的就是体力活了. 回家后整理下. http://yp.oss.org.cn/software/show_resource.php?resource_i ...
- ExecuteNonQuery&& ExecuteQuery 区别
前些日子作一些数据项目的时候 在ADO.NET 中处理 ExecuteNonQuery()方法时,总是通过判断其返回值是否大于0来判断操作时候成功 .但是实际上并不是这样的,好在处理的数据操作多时 修 ...