|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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可以根据你当前的系统的需要来进行调整。” |
|