Karakter Setleri
Karakter seti desteği: Desteklenen ve reddedilen karakter setleri ve oturum karakter seti kuralları.
GoArchive tüm metin değerlerini bir utf8mb4 oturumu üzerinden okur ve yazar. Bazı karakter setleri utf8mb4 biçimine ve bu biçimden birebir dönüştürülemez: İki karakter tek bir karakter olarak okunabilir veya bir karakter ? olarak okunabilir. Bu nedenle GoArchive, kolonlarında bu tür bir karakter seti kullanılan görevi, herhangi bir satır okunmadan önce reddeder.
Oturum Karakter Seti
Her bağlantı, kimlik doğrulamanın (authentication) ardından utf8mb4 karakter setine ve utf8mb4_general_ci karşılaştırma kuralına (collation) ayarlanır. Böylece sunucudaki init_connect ayarı bu karakter setini daraltamaz. Ardından her kaynak ve hedef bağlantısı, açıldığı anda oturum ayarlarını doğrular (SESSION_CHARSET_CHECK
). Görevin where koşulundaki karşılaştırmalar ve GoArchive’ın anahtar SQL sorguları bu karşılaştırma kuralını kullanır.
Kolonlar Denetlenir
Ön kontroller, herhangi bir satır okunmadan önce, çalıştırmanın metin olarak okuduğu veya yazdığı ve karakter seti desteklenmeyen her görev kolonunu reddeder (COLUMN_CHARSET_CHECK ):
| Görev Türü | Denetlenen Kolonlar |
|---|---|
archive, copy-only | Kaynaktaki her görev tablosunun tüm kolonları ve hedefte aynı adı taşıyan her kolon |
purge | Kaynakta, her görev tablosunun birincil anahtar ve foreign_key kolonları |
ENUM ve SET kolonları denetlenir. Sayılar, zamansal tipler, ikili dizeler (binary strings) ve JSON bir karakter setine sahip olmadığı için denetlenmez. Bu denetimi atlamanın hiçbir yolu yoktur: Karakter seti uyuşmazlığından doğacak veri kaybı sessizce gerçekleşeceği ve sonradan tespit edilemeyeceği için, ön kontroller atlandığında (bypass) dahi bu iki denetim zorunlu olarak uygulanır.
Desteklenen Karakter Setleri
| Karakter Seti | Not |
|---|---|
utf8mb4 | Oturumun kendi karakter seti |
utf8mb3 | |
ascii | 0x80–0xFF baytları depolanamaz; bu nedenle bu baytların hiçbiri çalıştırmaya ulaşmaz |
latin1 | |
latin2 | |
latin5 | |
latin7 | |
cp850 | |
cp852 | |
cp866 | |
keybcs2 | |
koi8r | |
koi8u | |
macce | |
macroman | |
utf16 | Vekil çiftler (surrogate pairs) dahil tüm Unicode karakterleri |
utf16le | Vekil çiftler (surrogate pairs) dahil tüm Unicode karakterleri |
utf32 | Tüm Unicode karakterleri |
binary | Listenin eksiksiz olması için yer alır: İkili bir dizenin karakter seti yoktur |
Reddedilen Karakter Setleri
Diğer tüm karakter setleri reddedilir:
| Karakter Seti | Reddedilme Nedeni |
|---|---|
sjis | İki karakter tek bir karakter olarak okunur; bazı kodlar ? olarak okunur |
cp932 | İki karakter tek bir karakter olarak okunur (yinelenen NEC ve IBM karakterleri); bazı kodlar ? olarak okunur |
eucjpms | İki karakter tek bir karakter olarak okunur (yinelenen NEC ve IBM karakterleri); bazı kodlar ? olarak okunur |
ujis | İki karakter tek bir karakter olarak okunur (tam genişlikli ters eğik çizgi ve tilde); bazı kodlar ? olarak okunur |
armscii8 | Altı noktalama baytı, ASCII’deki benzerleri olarak okunur |
tis620 | Bazı kodlar U+FFFD olarak okunur |
big5 | Bazı kodlar ? veya U+FFFD olarak okunur |
euckr | Bazı kodlar ? olarak okunur |
gb2312 | Bazı kodlar ? olarak okunur |
gbk | Bazı kodlar ? olarak okunur |
gb18030 | Bazı kodlar ? olarak okunur |
cp1250 | Karşılığı olmayan baytlar ? olarak okunur |
cp1251 | Karşılığı olmayan baytlar ? olarak okunur |
cp1256 | Karşılığı olmayan baytlar ? olarak okunur |
cp1257 | Karşılığı olmayan baytlar ? olarak okunur |
dec8 | Karşılığı olmayan baytlar ? olarak okunur |
geostd8 | Karşılığı olmayan baytlar ? olarak okunur |
greek | Karşılığı olmayan baytlar ? olarak okunur |
hebrew | Karşılığı olmayan baytlar ? olarak okunur |
hp8 | Karşılığı olmayan baytlar ? olarak okunur |
swe7 | Karşılığı olmayan baytlar ? olarak okunur |
ucs2 | Tekil vekil karakterler (lone surrogates), geçerli UTF-8 olmayan ve sorgu parametresi olarak geri bağlanamayan (cannot be bound back) baytlar şeklinde okunur |
Doğrulamadan geçmeyen bir kolonu her iki sunucuda da utf8mb4 karakter setine dönüştürün veya tablosunu görevin dışında bırakın.
