六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

淺談MySQL備份字符集的問(wèn)題

[摘要][導(dǎo)讀] 1 引子MySQL備份時(shí)選擇字符集是一個(gè)難題,特別是字符集不定的業(yè)務(wù)。mysqldump默認(rèn)使用utf8,而官方也推薦使用utf8。但實(shí)際上,對(duì)于中文,部分相當(dāng)一部分gbk編碼字符沒(méi)有對(duì)應(yīng)的unicode編碼,也就是說(shuō)這部分字符集1 引子MySQL備份時(shí)選擇字符集是一個(gè)難題,特別是字符集...
[導(dǎo)讀] 1 引子MySQL備份時(shí)選擇字符集是一個(gè)難題,特別是字符集不定的業(yè)務(wù)。mysqldump默認(rèn)使用utf8,而官方也推薦使用utf8。但實(shí)際上,對(duì)于中文,部分相當(dāng)一部分gbk編碼字符沒(méi)有對(duì)應(yīng)的unicode編碼,也就是說(shuō)這部分字符集

1 引子

MySQL備份時(shí)選擇字符集是一個(gè)難題,特別是字符集不定的業(yè)務(wù)。mysqldump默認(rèn)使用utf8,而官方也推薦使用utf8。但實(shí)際上,對(duì)于中文,部分相當(dāng)一部分gbk編碼字符沒(méi)有對(duì)應(yīng)的unicode編碼,也就是說(shuō)這部分字符集使用utf8備份會(huì)導(dǎo)致數(shù)據(jù)丟失。那么有沒(méi)有解決方法呢?

當(dāng)然,最直接的方法是將這部分編碼的映射加上。但是,這部分的字符集數(shù)量并不是少數(shù),而且,更蛋疼的是,似乎找不到這部分字符集權(quán)威的映射標(biāo)準(zhǔn)。那么,還有其它方法嗎?

實(shí)際上,如果使用binary進(jìn)行備份,就不會(huì)存在字符集的轉(zhuǎn)換過(guò)程,也就不會(huì)存在上述問(wèn)題。那么,使用binary是否就解決了gbk所有的問(wèn)題呢?答案是NO。

2 binary的問(wèn)題

在講binary的問(wèn)題之前。需要弄清2個(gè)問(wèn)題。對(duì)于MySQL備份,分兩部分:schema信息和實(shí)際數(shù)據(jù)。而Schema信息一律使用utf8編碼,但是,default value除外。這正是問(wèn)題的來(lái)源。

2.1 utf8備份

(1)文件.frm會(huì)存儲(chǔ)table的schema信息,并通過(guò)一個(gè)實(shí)際的記錄來(lái)存儲(chǔ)各個(gè)field的默認(rèn)值。Schema對(duì)應(yīng)的信息(包括comment)使用utf8存儲(chǔ),但是default value使用table指定的字符集進(jìn)行存儲(chǔ)。

(2)當(dāng)執(zhí)行show create table語(yǔ)句時(shí),mysqld會(huì)將frm中的默認(rèn)值從table指定的編碼轉(zhuǎn)成utf8編碼。

(3)當(dāng)mysqld執(zhí)行create table語(yǔ)句,會(huì)將default value從utf8轉(zhuǎn)成table指定的字符集。

2.2 binary備份

如果指定binary進(jìn)行備份。在導(dǎo)入時(shí),在創(chuàng)建table之前,雖然將character_set_client指定為utf8,但collation_connection還是binary。所以,存儲(chǔ)默認(rèn)值時(shí)不會(huì)進(jìn)行utf8到table指定的字符集的轉(zhuǎn)換。如果table指定為gbk編碼,導(dǎo)入必然失敗。

示例:

CREATE TABLE `t1`(

`iNetbarId` int(11) NOT NULL DEFAULT '0',

`iUin` bigint(20) NOT NULL DEFAULT '0',

`vNetbarName` varchar(80) NOT NULL DEFAULT '“-”',

PRIMARY KEY (`iNetbarId`)

) ENGINE=InnoDB DEFAULT CHARSET=gbk;

insert into t1 values(1,1,'xxxx');

clip_image002

可以看到,正常導(dǎo)出的表,導(dǎo)入?yún)s出現(xiàn)1067 Invalid default value的錯(cuò)誤。

3 解決方法

mysqldump時(shí),在執(zhí)行create table語(yǔ)句之前,增加對(duì)character_set_connection 的設(shè)置。

/*!40101 SET character_set_connection = utf8 */

clip_image004

clip_image006

這也算是MySQL一個(gè)bug,既然schema信息從頭到尾都使用utf8,在執(zhí)行create table之前,就應(yīng)該將連接的字符集變量設(shè)置成utf8,而不是只設(shè)置client的字符集變量。

以上就是 淺談MySQL備份字符集的問(wèn)題的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!


學(xué)習(xí)教程快速掌握從入門(mén)到精通的SQL知識(shí)。




主站蜘蛛池模板: 天堂最新资源在线 | 亚洲一区精品在线 | 欧美亚洲国产一区二区 | 日韩精品在线观看免费 | 日韩在线视频导航 | 亚洲国产精品成人午夜在线观看 | 日韩久久影院 | 中文国产成人久久精品小说 | 日韩黄色一级视频 | 色天天综合色天天碰 | 天堂网亚洲 | 在线亚洲自拍 | 午夜色站| 天天艹日日干 | 天天久久综合 | 青青草综合在线 | 怡春院日本一区二区久久 | 亚洲综合色就色手机在线观看 | 青草青青高清影院在线观看 | 人人干在线观看 | 日韩第六页 | 依人在线| 亚洲性免费 | 午夜高清 | 青娱乐手机在线 | 伊人影视传媒有限公司 | 丝袜啪啪 | 日韩欧美亚洲 | 午夜a今| 天天澡天天碰天天狠伊人五月 | 在线看91| 亚洲免费影院 | 四川农村女人一级毛片 | 午夜视 | 天堂在线网站 | 中文字幕无码中文字幕有码 | 亚洲成人婷婷 | 性刺激欧美三级在线现看中文 | 青青碰| 青青草原在线 | 日韩欧美亚洲乱码中文字幕 |