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

明輝手游網(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í)。




主站蜘蛛池模板: 日韩专区第一页 | 婷婷伊人五月 | 天天干天天干天天天天天天爽 | 青春草在线观看播放免费视频 | 日本高清在线不卡 | 日韩第七页 | 亚洲精品中文字幕无乱码麻豆 | 亚洲国产高清视频在线观看 | 四虎影视成人永久在线播放 | 日韩一区二区精品久久高清 | 青春草视频在线观看 | 日韩欧美国产另类 | 中文字幕欧美日韩久久 | 婷婷色吧 | 日韩精品在线免费观看 | 欧美一区二区三区影院 | 欧美综合亚洲图片综合区 | 欧美特黄一级大黄录像 | 亚洲国产精品欧美日韩一区二区 | 亚洲男人的天堂网站 | 亚洲国产欧美在线人成精品一区二区 | 欧美一区2区三区4区贰佰公司 | 在线观看欧美三级 | 日韩乱视频| 日本高清在线播放 | 青草视频网站在线观看 | 香蕉网站狼人久久五月亭亭 | 日韩爽爽视频爽爽 | 午夜免费视频观看在线播放 | 综合热久久 | 午夜视频一区二区 | 四虎国产永久在线精品免费观看 | 一本一道久久 | 在线精品欧美日韩 | 欧美一级大片在线观看 | 亚洲伊人久久大香线焦 | 亚洲第一黄色网 | 日本中文字幕不卡 | 日韩不卡手机视频在线观看 | 亚洲最新永久观看在线 | 日本免费三区 |