仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 710|回复: 8
打印 上一主题 下一主题

[学习教程] 发一篇MySQL下数据表凌乱的字符编码处置和一些处置字符编码时的经常使用命令收拾 ...

[复制链接]
谁可相欹 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 20:12:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
根据Evans的调查报告,“MySQL的使用在未来将继续呈成长趋势。”  由于不晓得甚么时分的缘故原由,我们有一个数据库超等恶棍的具有了无敌的特征:数据表的编码是Latin1-swXXXX甚么的。而保留在内里的中文又是php强迫以utf8保留在个中。因而,出了各类七零八落的怪里怪气的偏差。让我等关于MySQL这类数据库本就没有甚么爱的人深感恶心。
  因而,昔日在研讨之下终究办理此成绩。再次申明,本文是把latin1转为utf8。
  成绩的中心仍是在于要改动已有保留字符的凌乱成绩,最完全和便利的办法就是间接导出,然后再以对应所需的字符导进。
  为了可以准确的导进,我们必需要确保导出的数据在你的笔墨编纂器下可以一般显现中文。关于我们此次的这个数据库,我们终极的导出语句是:
viewplaincopytoclipboardPRint?
/usr/local/mysql/bin/mysqldump-p--opt--default-character-set=latin1sends>/home/test/sends.sql
/usr/local/mysql/bin/mysqldump-p--opt--default-character-set=latin1sends>/home/test/sends.sql
  导出后你就盲目的先看看中文显现正不一般吧,假如不一般就归去改个编码持续导。。。。
  假如一般,持续:
  如今要筹办导进,可是导进的事情之前有个准备事情要做,假如你之前只导出一个表。那修正你导出的文件中的这一行:
viewplaincopytoclipboardprint?
/*!40101SETNAMESlatin1*/;

成为

/*!40101SETNAMESutf8*/;
/*!40101SETNAMESlatin1*/;
成为
/*!40101SETNAMESutf8*/;

  假如不幸你导出的是全部有良多分歧编码的数据表的数据库,ok。请利用交换工具把本来有的各类编码都交换成你要的目标编码。我这里本来有utf8和latin1,以是只必要把Latin1全体交换成utf8便可。
  以后新建一个要导进数据的数据库:
viewplaincopytoclipboardprint?
mysql>createdatabase`TARGET_DB`defaultcharactersetutf8collateutf8_general_ci
mysql>createdatabase`TARGET_DB`defaultcharactersetutf8collateutf8_general_ci
  OK,如今能够导进数据表了:
viewplaincopytoclipboardprint?
mysql-uroot-pTARGET_DB--default-character-set=utf8</home/test/sends.sql
mysql-uroot-pTARGET_DB--default-character-set=utf8</home/test/sends.sql
  如许,导归去今后天下就僻静了。回忆之前,本来一向不年夜乐成都是由于我们没有往修正.sql文件内里的那些编码设置。此次终究好了。这个破数据库,贫苦逝世了。我今后写程序相对不必mysql了。。。。。
  最初附带一些mysql操纵字符集的时分会用到的命令,都是从网上搜集的:
viewplaincopytoclipboardprint?
1.修正MySQL数据库默许字符集(mysqldatabasedefaultcharacterset)

alterdatabasetestdbdefaultcharacterset=gb2312;
2.修正MySQL数据表默许字符集(mysqltabledefaultcharacterset)

altertableip_to_countrydefaultcharacterset=gb2312;
注重:修正MySQL的默许字符集,不论是在数据库级别,仍是数据表级别,对已存储的字符数据无任何改动。只是新增的表或列,入手下手利用新的字符集。

3.转换MySQL数据表字符集(mysqltablecharacterset)

MySQL中有一个数据表ip_to_country,之前该表字符列数据都是以utf8编码格局寄存的,如今想转换为gb2312编码格局寄存。必要利用MySQL转换字符集命令:converttocharacterset

altertableip_to_countryconverttocharactersetgb2312;
提醒:convertto也会把数据表ip_to_country的默许字符集从utf8变动为gb2312。

4.转换MySQL数据表中某个列的字符集(mysqlcolumncharacterset)

altertableip_to_countrymodifycountry_namevarchar(50)charactersetgb2312;
这个语句把独自一个列country_name的字符集转换为gb2312。这在用法在实践中对照少见,由于年夜多半情形下,都是改动全部表的字符集。

来自:http://www.sqlstudy.com/sql_article.php?id=2008082102
1.修正MySQL数据库默许字符集(mysqldatabasedefaultcharacterset)
alterdatabasetestdbdefaultcharacterset=gb2312;
2.修正MySQL数据表默许字符集(mysqltabledefaultcharacterset)
altertableip_to_countrydefaultcharacterset=gb2312;
注重:修正MySQL的默许字符集,不论是在数据库级别,仍是数据表级别,对已存储的字符数据无任何改动。只是新增的表或列,入手下手利用新的字符集。
3.转换MySQL数据表字符集(mysqltablecharacterset)
MySQL中有一个数据表ip_to_country,之前该表字符列数据都是以utf8编码格局寄存的,如今想转换为gb2312编码格局寄存。必要利用MySQL转换字符集命令:converttocharacterset
altertableip_to_countryconverttocharactersetgb2312;
提醒:convertto也会把数据表ip_to_country的默许字符集从utf8变动为gb2312。
4.转换MySQL数据表中某个列的字符集(mysqlcolumncharacterset)
altertableip_to_countrymodifycountry_namevarchar(50)charactersetgb2312;
这个语句把独自一个列country_name的字符集转换为gb2312。这在用法在实践中对照少见,由于年夜多半情形下,都是改动全部表的字符集。
来自:http://www.sqlstudy.com/sql_article.php?id=2008082102
viewplaincopytoclipboardprint?
创立一个名为test的数据库,而且设置字符集都是utf8:
createdatabase`test`defaultcharactersetutf8collateutf8_general_ci

检察ta数据库中相似test的数据表的信息:
showtablestatusfromtalike%test%;

检察MySQL数据库服务器和数据库字符集。
showvariableslike%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|......--服务器字符集
|character_set_system|utf8|......
|character_sets_dir|D:MySQLServer5.0sharecharsets|......


检察MySQL数据表(table)的字符集。

showtablestatusfromsqlstudy_dblike%countries%;
+-----------+--------+---------+------------+------+-----------------+------
|Name|Engine|Version|Row_format|Rows|Collation|......
+-----------+--------+---------+------------+------+-----------------+------
|countries|InnoDB|10|Compact|11|utf8_general_ci|......


检察MySQL数据列(column)的字符集。

showfullcolumnsfromcountries;
+----------------------+-------------+-----------------+--------
|Field|Type|Collation|.......
+----------------------+-------------+-----------------+--------
|countries_id|int(11)|NULL|.......
|countries_name|varchar(64)|utf8_general_ci|.......
|countries_iso_code_2|char(2)|utf8_general_ci|.......
|countries_iso_code_3|char(3)|utf8_general_ci|.......
|address_format_id|int(11)|NULL|.......


检察以后安装的MySQL所撑持的字符集。

showcharset;或
showcharset;
+----------+-----------------------------+---------------------+--------+
|Charset|Description|Defaultcollation|Maxlen|
+----------+-----------------------------+---------------------+--------+
|big5|Big5TraditionalChinese|big5_chinese_ci|2|
|dec8|DECWestEuropean|dec8_swedish_ci|1|
|cp850|DOSWestEuropean|cp850_general_ci|1|
|hp8|HPWestEuropean|hp8_english_ci|1|
|koi8r|KOI8-RRelcomRussian|koi8r_general_ci|1|
|latin1|cp1252WestEuropean|latin1_swedish_ci|1|
|latin2|ISO8859-2CentralEuropean|latin2_general_ci|1|
|swe7|7bitSwedish|swe7_swedish_ci|1|
|ascii|USASCII|ascii_general_ci|1|
|ujis|EUC-JPJapanese|ujis_japanese_ci|3|
|sjis|Shift-JISJapanese|sjis_japanese_ci|2|
|hebrew|ISO8859-8Hebrew|hebrew_general_ci|1|
|tis620|TIS620Thai|tis620_thai_ci|1|
|euckr|EUC-KRKorean|euckr_korean_ci|2|
|koi8u|KOI8-UUkrainian|koi8u_general_ci|1|
|gb2312|GB2312SimplifiedChinese|gb2312_chinese_ci|2|
|greek|ISO8859-7Greek|greek_general_ci|1|
|cp1250|WindowsCentralEuropean|cp1250_general_ci|1|
|gbk|GBKSimplifiedChinese|gbk_chinese_ci|2|
|latin5|ISO8859-9Turkish|latin5_turkish_ci|1|
|armscii8|ARMSCII-8Armenian|armscii8_general_ci|1|
|utf8|UTF-8Unicode|utf8_general_ci|3|
|ucs2|UCS-2Unicode|ucs2_general_ci|2|
|cp866|DOSRussian|cp866_general_ci|1|
|keybcs2|DOSKamenickyCzech-Slovak|keybcs2_general_ci|1|
|macce|MacCentralEuropean|macce_general_ci|1|
|macroman|MacWestEuropean|macroman_general_ci|1|
|cp852|DOSCentralEuropean|cp852_general_ci|1|
|latin7|ISO8859-13Baltic|latin7_general_ci|1|
|cp1251|WindowsCyrillic|cp1251_general_ci|1|
|cp1256|WindowsArabic|cp1256_general_ci|1|
|cp1257|WindowsBaltic|cp1257_general_ci|1|
|binary|Binarypseudocharset|binary|1|
|geostd8|GEOSTD8Georgian|geostd8_general_ci|1|
|cp932|SJISforWindowsJapanese|cp932_japanese_ci|2|
|eucjpms|UJISforWindowsJapanese|eucjpms_japanese_ci|3|


修正表和字段的字符集
//修正表
altertable表名converttocharactersetgbk;
//修正字段
altertable表名modifycolumn字段名varchar(30)charactersetgbknotnull;
MySQLAB公司的一个高级开发者者表示,“这个特点使得MySQL可以根据你当前的系统的需要来进行调整。”
老尸 该用户已被删除
沙发
发表于 2015-1-18 18:36:38 | 只看该作者
我是新手,正在学习数据库和操作系统,深感理论的泛广,唯有一步一步来,但是又感觉时间不够,收集了很多资料却总是没能认真的看完,希望有一个讨论板块,大家共同解决,共同分享,共同努力
兰色精灵 该用户已被删除
板凳
发表于 2015-1-27 13:48:25 | 只看该作者
大侠们有推荐的书籍和学习方法写下吧。
精灵巫婆 该用户已被删除
地板
发表于 2015-2-5 12:00:25 | 只看该作者
如果我们从集合论(关系代数)的角度来看,一张数据库的表就是一组数据元的关系,而每个SQL语句会改变一种或数种关系,从而产生出新的数据元的关系(即产生新的表)。
深爱那片海 该用户已被删除
5#
发表于 2015-2-11 19:11:08 | 只看该作者
光写几个SQL实在叫无知。
蒙在股里 该用户已被删除
6#
发表于 2015-3-2 18:02:24 | 只看该作者
SQL语言是学习所有数据库产品的基础,无论你是做数据库管理还是做数据库开发都是这样。不过具体学习的侧重点要看你将来做哪一块,如果是做数据库管理(DBA),侧重点应该放在SQLServer的系统管理上.
爱飞 该用户已被删除
7#
发表于 2015-3-11 05:20:48 | 只看该作者
可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。
飘灵儿 该用户已被删除
8#
发表于 2015-3-17 21:10:44 | 只看该作者
多加的系统视图和实时系统信息这些东西对DBA挑优非常有帮助,但是感觉粒度还是不太细。
不帅 该用户已被删除
9#
发表于 2015-3-25 03:21:13 | 只看该作者
无法深入到数据库系统层面去了解和探究
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 20:11

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表