MariaDB - SQLite dönüştürme
mariadb-dump, mysqldump, phpMyAdmin veya Adminer ile alınmış bir dökümü .sql veya .sql.gz olarak bırakın ve aynı tablolar, anahtarlar, indeksler ve verilerle bir SQLite betiği indirin. SQLite'in olduğu gibi tutamadığı her değer ve taşımadığı her nesne raporda listelenir.
18 satır dönüştürüldü, 8 düzeltme, reddedilen yok
shop_2024_mariadb.sql içindeki tablolarMariaDB 11.8.9-MariaDB-ubu2404 dökümü · mariadb-dump ile yazıldı · utf8mb4
customers8 satır3
8 sütun id INTEGER not null name VARCHAR(100) not null email VARCHAR(150) not null country VARCHAR(2) not null is_active INTEGER not null signed_up DATE created_at TIMESTAMP not null last_ip TEXT orders10 satır5
12 sütun id INTEGER not null customer_id INTEGER not null status TEXT not null total DECIMAL(10,2) not null items INTEGER not null ordered_at DATETIME not null shipped_at DATETIME note VARCHAR(255) order_ref TEXT not null invoice INTEGER not null details TEXT updated_at TIMESTAMP not null
-- Written by IntoSQL from a MySQL dump. Load it with: sqlite3 -bail <database> < <file>
PRAGMA foreign_keys = OFF;
PRAGMA synchronous = OFF;
BEGIN;
CREATE TABLE customers ( -- People who bought at least once
id INTEGER PRIMARY KEY AUTOINCREMENT,
name VARCHAR(100) NOT NULL,
email VARCHAR(150) NOT NULL,
country VARCHAR(2) DEFAULT 'US' NOT NULL,
is_active INTEGER DEFAULT 1 NOT NULL,
signed_up DATE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
last_ip TEXT,
CONSTRAINT customers_id_check CHECK (id >= 0)
);
CREATE TABLE orders (
id INTEGER PRIMARY KEY AUTOINCREMENT,
customer_id INTEGER NOT NULL,
status TEXT DEFAULT 'pending' NOT NULL,
total DECIMAL(10,2) NOT NULL,
items INTEGER DEFAULT 1 NOT NULL,
ordered_at DATETIME NOT NULL,
shipped_at DATETIME,
note VARCHAR(255),
order_ref TEXT NOT NULL,
invoice INTEGER NOT NULL,
details TEXT,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
CONSTRAINT orders_id_check CHECK (id >= 0),
CONSTRAINT orders_customer_id_check CHECK (customer_id >= 0),
CONSTRAINT orders_status_check CHECK (status IN ('pending', 'paid', 'shipped', 'cancelled', '')),
CONSTRAINT orders_items_check CHECK (items >= 0),
CONSTRAINT fk_orders_customer FOREIGN KEY (customer_id) REFERENCES customers (id)
);
INSERT INTO customers (id, name, email, country, is_active, signed_up, created_at, last_ip) VALUES
(1,'Ana Martínez','ana@example.com','MX',1,'2023-01-15','2023-01-15 10:24:00','::ffff:203.0.113.7'),
(2,'Zoë Müller','zoe@example.de','DE',1,'2023-02-03','2023-02-03 08:11:42','2001:db8::1'),
(3,'José Peña','jose@example.es','ES',0,'2023-03-21','2023-03-21 19:05:17',NULL),
(4,'李雷','lilei@example.cn','CN',1,'2023-05-09','2023-05-09 02:40:00','::ffff:198.51.100.23'),
(5,'Noah O''Brien','noah@example.ie','IE',1,NULL,'2023-06-30 14:00:00',NULL),
(6,'Amélie Laurent','amelie@example.fr','FR',1,'2024-01-02','2024-01-02 09:30:00','2001:db8:85a3::8a2e:370:7334'),
(7,'Ravi Patel','ravi@example.in','IN',0,'2024-02-29','2024-02-29 23:59:59','::ffff:192.0.2.200'),
(8,'Sofia Rossi 🌻','sofia@example.it','IT',1,'2024-04-12','2024-04-12 12:12:12',NULL);
INSERT INTO orders (id, customer_id, status, total, items, ordered_at, shipped_at, note, order_ref, invoice, details, updated_at) VALUES
(1,1,'shipped',129.90,3,'2024-03-01 10:00:00','2024-03-02 16:30:00',NULL,'0b7a4c2e-3f1d-4e8a-9c55-1a2b3c4d5e6f',1000,'{"gift": false}','2024-03-02 16:30:00'),
(2,2,'paid',54.00,1,'2024-03-02 11:15:00',NULL,'Gift wrap 🎁','1c8b5d3f-4a2e-4f9b-8d66-2b3c4d5e6f70',1001,'{"gift": true, "wrap": "red"}','2024-03-02 11:20:00'),
(3,1,'cancelled',12.50,1,'2024-03-03 09:45:00',NULL,'Customer changed their mind','2d9c6e4a-5b3f-4a0c-9e77-3c4d5e6f7081',1002,NULL,'2024-03-03 10:00:00'),
(4,4,'shipped',980.00,12,'2024-03-05 02:10:00','2024-03-07 08:00:00','请小心轻放','3e0d7f5b-6c4a-4b1d-8f88-4d5e6f708192',1003,'{"fragile": true}','2024-03-07 08:00:00'),
(5,5,'pending',45.75,2,'2024-03-08 17:20:00',NULL,'Leave at the door; ring twice','4f1e806c-7d5b-4c2e-9a99-5e6f708192a3',1004,NULL,'2024-03-08 17:20:00'),
(6,6,'shipped',310.40,5,'2024-03-10 13:00:00','2024-03-11 09:00:00','Fragile: "glass"','50f2917d-8e6c-4d3f-8baa-6f708192a3b4',1005,'{"fragile": true}','2024-03-11 09:00:00'),
(7,8,'paid',76.20,2,'2024-03-11 18:45:00',NULL,NULL,'6103a28e-9f7d-4e40-9cbb-708192a3b4c5',1006,NULL,'2024-03-11 18:46:00'),
(8,2,'',19.99,1,'2024-03-12 08:00:00',NULL,'Status lost in an old import','7214b39f-a08e-4f51-8dcc-8192a3b4c5d6',1007,NULL,'2024-03-12 08:00:00'),
(9,3,'shipped',64.00,2,'2024-03-14 15:30:00',NULL,'Shipping date never recorded','8325c4a0-b19f-4062-9edd-92a3b4c5d6e7',1008,'{"parcels": [1, 2]}','2024-03-15 10:00:00'),
(10,7,'paid',1499.00,1,'2024-03-15 21:05:00',NULL,'C:\Users\ravi\invoice.pdf','9436d5b1-c2a0-4173-8fee-a3b4c5d6e7f8',1009,NULL,'2024-03-15 21:05:00');
-- Indexes, triggers and counters, after the rows so each index builds once.
CREATE UNIQUE INDEX customers_uq_email ON customers (email);
CREATE INDEX orders_idx_customer ON orders (customer_id);
CREATE INDEX orders_idx_status_date ON orders (status, ordered_at);
UPDATE sqlite_sequence SET seq = max(seq, 1000) WHERE name = 'customers';
INSERT INTO sqlite_sequence (name, seq) SELECT 'customers', 1000 WHERE NOT EXISTS (SELECT 1 FROM sqlite_sequence WHERE name = 'customers');
UPDATE sqlite_sequence SET seq = max(seq, 5000) WHERE name = 'orders';
INSERT INTO sqlite_sequence (name, seq) SELECT 'orders', 5000 WHERE NOT EXISTS (SELECT 1 FROM sqlite_sequence WHERE name = 'orders');
CREATE TRIGGER orders_updated_at_on_update AFTER UPDATE ON orders FOR EACH ROW WHEN NEW.updated_at IS OLD.updated_at AND (NEW.id IS NOT OLD.id OR NEW.customer_id IS NOT OLD.customer_id OR NEW.status IS NOT OLD.status OR NEW.total IS NOT OLD.total OR NEW.items IS NOT OLD.items OR NEW.ordered_at IS NOT OLD.ordered_at OR NEW.shipped_at IS NOT OLD.shipped_at OR NEW.note IS NOT OLD.note OR NEW.order_ref IS NOT OLD.order_ref OR NEW.invoice IS NOT OLD.invoice OR NEW.details IS NOT OLD.details)
BEGIN
UPDATE orders SET updated_at = CURRENT_TIMESTAMP WHERE rowid = NEW.rowid;
END;
COMMIT;
-- Rows whose foreign key finds no parent, if any: the load doesn't stop for them.
PRAGMA foreign_key_check;
Düzeltmeler
- customers tablosunun "id" sütunu işaretsiz; bu yüzden negatif olmadığını denetleyen bir CHECK ile INTEGER oldu.
- customers tablosunun "signed_up" sütunu artık NULL kabul ediyor: bazı değerleri saklanamadı ve NULL oldu.
- customers tablosundaki "signed_up" sütununun varsayılan değeri 0000‑00‑00, SQLite'in kabul ettiği bir tarih değil; bu yüzden sütunun varsayılan değeri yok.
- orders tablosunun "customer_id" sütunu işaretsiz; bu yüzden negatif olmadığını denetleyen bir CHECK ile INTEGER oldu.
- orders tablosunun "id" sütunu işaretsiz; bu yüzden negatif olmadığını denetleyen bir CHECK ile INTEGER oldu.
- orders tablosunun "items" sütunu işaretsiz; bu yüzden negatif olmadığını denetleyen bir CHECK ile INTEGER oldu.
- orders tablosundaki "status" sütununun 1 satırı MySQL'in geçersiz girişler için sakladığı boş değeri içeriyor; değerleri denetleyen CHECK buna izin veriyor.
- orders tablosunun "updated_at" sütunu her güncellemede geçerli zamana ayarlanıyor; SQLite'de bunu bir tetikleyici yapıyor.
Kontrol edilmeli
- 1 sequence oluşturulmadı; SQLite içinde sequence yoktur. Uygulamanız ihtiyaç duyuyorsa sonraki değeri bir tabloda tutun.
- customers tablosunun "signed_up" sütununda 0000‑00‑00 gibi 1 sıfır veya imkansız tarih var; SQLite bunları saklayamaz, bu yüzden NULL yapıldı. Bu tarihler bir anlam taşıyorsa döküm almadan önce kaynakta gerçek tarihlerle değiştirin.
- orders tablosundaki "invoice" sütununun varsayılan değeri SQLite için yazılamıyor (a sequence); bu yüzden sütunun varsayılan değeri yok. Yeni satırlar gerektiriyorsa varsayılan değeri elle ekleyin.
- orders tablosunun "shipped_at" sütununda 0000‑00‑00 00:00:00 gibi 1 sıfır veya imkansız tarih var; SQLite bunları saklayamaz, bu yüzden NULL yapıldı. Bu tarihler bir anlam taşıyorsa döküm almadan önce kaynakta gerçek tarihlerle değiştirin.
Dosyan bu bilgisayarda dönüştürülür ve asla yüklenmez.
Diğer örnekler:
MariaDB ile SQLite arasında neler değişir
Her satır, dönüştürücünün uyguladığı bir kuraldır; yanında, kural verilerinizde bir şeyi değiştirdiğinde yazılan rapor satırı yer alır.
TINYINT(1), BOOL
değerleri olduğu gibi INTEGER
SQLite'ta boolean türü yoktur; true ve false 1 ve 0 tam sayılarıdır, bu yüzden her değer anlamını korur.
UNSIGNED integers
negatif olmadığını denetleyen bir CHECK ile INTEGER; 2^63-1 üzerindeki değerleri tutan BIGINT UNSIGNED TEXT olur
SQLite tam sayıları 64 bit ve işaretlidir. CHECK, MySQL'deki gibi negatif değerleri dışarıda tutar; işaretli aralığı aşan değerler hiçbir basamak kaybolmasın diye metin olarak korunur.
Rapor satırı: unsigned_widened
ZEROFILL and display widths
kaldırılır
Sıfır dolgusu bir sayının gösterilme biçimidir, sayının parçası değildir. Sayılar korunur; dolgu önemliyse okurken biçimlendirin.
Rapor satırı: zerofill_dropped
FLOAT(M,D)
ölçek olmadan REAL
SQLite'ta kayan noktalı sayıların sabit ölçeği yoktur. Saklanan değerler olduğu gibi kopyalanır.
Rapor satırı: float_scale_dropped
DECIMAL(p,s)
15 basamağa kadar DECIMAL(p,s); ötesi TEXT
SQLite bir sayıda yaklaşık 15 anlamlı basamak tutar. Daha geniş ondalıklar her basamak tam kalsın diye metin olarak korunur.
Rapor satırı: decimal_as_text
BIT(1), BIT(n)
bitlerin değeriyle INTEGER; BIT(64) TEXT basamakları olarak
Bir bit alanı, bitlerinin oluşturduğu sayı olarak saklanır. BIT(64)'ün en üst biti işaretli bir tam sayıya sığmaz, bu yüzden sayısı metin olarak korunur.
zero, partial or impossible dates (0000-00-00, 2024-02-30)
NULL
SQLite'ın tarih fonksiyonları yalnızca gerçek takvim tarihlerini okur. Bunlar NULL olur ve rapor, diğer tüm veritabanlarında olduğu gibi, bunları sayar.
Rapor satırı: invalid_date_null
NOT NULL columns with values that become NULL
NOT NULL kaldırılır
Değerleri NULL olmak zorunda kalan bir sütun NOT NULL kısıtını koruyamaz, yoksa yükleme durur.
Rapor satırı: not_null_relaxed
DEFAULT '0000-00-00'
varsayılan değer yok
Gerçek bir tarih olmayan bir varsayılan değer, uydurma bir tarihle değiştirilmek yerine dışarıda bırakılır.
Rapor satırı: zero_date_default
TIME
süreler dahil, MySQL'in yazdığı şekliyle TIME metni
SQLite zamanları metin olarak tutar, bu yüzden bir günü aşan veya sıfırın altındaki süreler tam olarak korunur.
YEAR
aralığını denetleyen bir CHECK ile INTEGER
SQLite'ta yıl türü yoktur; CHECK, MySQL'in izin verdiği değerlerin aynısını korur.
CHAR(n), VARCHAR(n)
VARCHAR(n), zorunlu tutulmaz
SQLite tanımlanan türü araçların okuması için tutar ama uzunluğu sınırlamaz; değerler MySQL'in döndürdükleridir.
DATETIME
ISO 8601 metni olarak DATETIME
SQLite tarihleri, tarih fonksiyonlarının okuduğu metin olarak saklar.
TIMESTAMP
UTC'de ISO 8601 metni olarak TIMESTAMP; dökümün belirttiği saat dilimi, belirtmiyorsa UTC
TIMESTAMP bir andır ve UTC olarak yazılır. Dökümler değeri yazdıkları saat dilimini belirtir (mysqldump UTC yazar); bu bilgi yoksa değerler UTC olarak okunur ve rapor bunu belirtir.
Rapor satırı: timestamp_zone_assumed
ENUM
değerlerini denetleyen bir CHECK ile TEXT
CHECK ile metin aynı değerleri korur.
ENUM holding '' (MySQL's error value)
CHECK'in izin verdiği boş değer
MySQL, esnek bir SQL modunda bir ENUM'a geçersiz bir değer girildiğinde boş bir dize saklar. Bu satırlar korunur ve CHECK onlara izin verir.
Rapor satırı: enum_invalid_value
ENUM holding values outside its list
CHECK yok
Listede adı geçmeyen değerler CHECK'ten geçemez; bu yüzden CHECK oluşturulmaz.
Rapor satırı: enum_check_skipped
SET
MySQL'in yazdığı şekliyle TEXT ('a,b')
SQLite'ta dizi yoktur; metin MySQL'in döndürdüğü metindir.
JSON
TEXT
SQLite'ın JSON fonksiyonları JSON'u metinden okur. JSON olarak tanımlanan bir sütun "123" değerini sayıya çevirirdi, bu yüzden TEXT olur.
NUL bytes in text
korunur
SQLite metni NUL baytı tutabilir, bu yüzden değer olduğu gibi kopyalanır.
text that isn't valid in its character set
hatalı baytlar yerine koyma karakteri olarak
SQLite metni UTF-8'dir; fonksiyonları UTF-8 olmayan baytları yanlış okur.
Rapor satırı: invalid_utf8_replaced
text decoded twice (ñ)
olduğu gibi kopyalanır
Döküm tam olarak bu karakterleri içerir, bu yüzden kopyalanırlar; rapor onları gösterir.
Rapor satırı: mojibake_suspected
AUTO_INCREMENT
sayacı kopyalanan id'lerin ötesine ayarlanmış INTEGER PRIMARY KEY AUTOINCREMENT
SQLite tam bir tam sayı birincil anahtarı sayar. AUTOINCREMENT, MySQL'deki gibi id'lerin yeniden kullanılmasını önler ve sayaç en yüksek id'den veya dökümün AUTO_INCREMENT değerinden (hangisi büyükse) sonra devam eder.
AUTO_INCREMENT on part of a key or outside one
sayaçsız INTEGER
SQLite yalnızca birincil anahtarın tamamı olan bir sütunu sayar; bu yüzden sütun değerlerini korur ve yeni satırların kendi değerleri gerekir.
Rapor satırı: identity_without_counter
ON UPDATE CURRENT_TIMESTAMP
bir AFTER UPDATE tetikleyicisi
Tetikleyici, bir satır değiştiğinde ve güncelleme sütunu ayarlamadıysa, MySQL'deki gibi sütunu geçerli zamana ayarlar.
Rapor satırı: on_update_trigger
generated columns
kaynaktaki gibi GENERATED ALWAYS AS, VIRTUAL veya STORED
SQLite 3.31 ve sonrası üretilen sütunları aynı iki şekilde hesaplar.
generated columns with functions SQLite lacks
düz bir sütun
SQLite için yazılamayan bir formül, düz bir sütun ve bir rapor satırı bırakır.
Rapor satırı: generated_not_translated
INVISIBLE columns
normal sütunlar
SQLite'ta görünmez sütunlar yoktur.
Rapor satırı: invisible_column
CHECK constraints
çevrilir, CREATE TABLE içinde satır içi
SQLite CHECK kısıtlarını yalnızca CREATE TABLE içinde kabul eder.
CHECK constraints with functions SQLite lacks
oluşturulmaz
SQLite için yazılamayan bir CHECK kısıtı dışarıda bırakılır ve raporlanır.
Rapor satırı: check_skipped
CHECK ... NOT ENFORCED
oluşturulmaz
MySQL bu CHECK kısıtlarını uygulamadan tutar, bu yüzden satırlar onları ihlal edebilir.
Rapor satırı: check_not_enforced
defaults with functions SQLite lacks
varsayılan değer yok
SQLite için yazılamayan bir varsayılan değer dışarıda bırakılır ve raporlanır.
Rapor satırı: default_not_translated
keys and indexes on a prefix, c(20)
substr(c, 1, 20) üzerinde bir indeks
SQLite ifadeleri indeksler; bu yüzden aynı önek indekslenir ve benzersiz bir önek benzersiz kalır.
Rapor satırı: prefix_unique
FULLTEXT indexes
oluşturulmaz
SQLite metni, kendi sorgularını gerektiren ayrı FTS5 tablolarıyla arar.
Rapor satırı: fulltext_not_created
SPATIAL indexes
oluşturulmaz
SQLite'ta bir sütun üzerinde uzamsal indeks yoktur.
Rapor satırı: spatial_index_not_created
functional indexes SQLite can't write
oluşturulmaz
SQLite için yazılamayan bir ifade üzerindeki indeks dışarıda bırakılır ve raporlanır.
Rapor satırı: index_skipped
foreign keys
CREATE TABLE içinde, denetlenmeden yüklenir, ardından PRAGMA foreign_key_check ile listelenir
SQLite yabancı anahtarları yalnızca CREATE TABLE içinde kabul eder ve yalnızca PRAGMA foreign_keys açıkken denetler. Satırlar MySQL'deki gibi denetlenmeden yüklenir ve betik, üst satırı olmayan her satırı listeleyerek biter.
foreign keys to columns without a unique key
oluşturulmaz
SQLite, başvurulan sütunlarda benzersiz bir anahtar ister; InnoDB istemez.
Rapor satırı: foreign_key_skipped
table, index and column names
yazıldığı gibi; yalnızca büyük/küçük harfle ayrıldıklarında veya bir indeks adı tekrarlandığında yeniden adlandırılır
SQLite adları büyük/küçük harf ayırmaz ve indeks adları veritabanı başına tek bir ad alanını paylaşır.
Rapor satırı: identifier_renamed
GEOMETRY, POINT, POLYGON...
BLOB içinde WKB
Standart WKB ikili biçimi her geometriyi tam olarak korur.
Rapor satırı: geometry_as_blob
INET4, INET6, UUID (MariaDB)
TEXT
SQLite'ta bu türler yoktur; metin MariaDB'nin döndürdüğü metindir.
BINARY, VARBINARY, BLOB
BLOB
Baytlar bayt olarak kalır.
PARTITION BY
tek tablo
Satırlar aynıdır.
Rapor satırı: partitions_dropped
WITH SYSTEM VERSIONING (MariaDB)
mevcut satırları içeren bir tablo
Döküm yalnızca mevcut satırları içerir.
Rapor satırı: system_versioning_dropped
MyISAM, MEMORY and other engines
normal bir tablo
SQLite'ın tek bir tablo motoru vardır.
Rapor satırı: engine_dropped
dumps of several databases
tek dosya, her tablonun adı önce veritabanının adıyla başlar
Bir SQLite dosyası tek bir veritabanıdır; bu yüzden veritabanı adı aynı adlı tabloları birbirinden ayırır.
Rapor satırı: databases_merged
views, triggers, procedures, functions and events
raporda listelenir
Kodları MySQL'in dilinde yazılmıştır, bu yüzden yeniden oluşturmanız için listelenirler.
Rapor satırı: not_converted_objects
dumps without CREATE TABLE
değerlerden okunan türler
--no-create-info ile alınan bir dökümde yalnızca satırlar vardır, bu yüzden türler değerlerden gelir.
Rapor satırı: no_schema
geometries in a dump without CREATE TABLE
BLOB içinde WKB
MySQL'in geometri biçimi değerlerden tanınır ve standart WKB olarak saklanır.
Rapor satırı: geometry_as_blob
_ci collations
tam karşılaştırma
SQLite, aksi belirtilmedikçe metni tam olarak karşılaştırır ve NOCASE yalnızca ASCII harflerini eşler.
Rapor satırı: case_insensitive_collation
SET NAMES utf8 from utf8mb4 tables
dönüştürülür, uyarıyla
MySQL 5.x mysqldump varsayılan olarak 3 baytlık utf8 yazar ve herhangi bir dönüştürücü dosyayı görmeden önce her emojiyi soru işaretiyle değiştirir.
Rapor satırı: dump_lost_four_byte_chars
dumps without SET NAMES whose text isn't UTF-8
Latin-1 (Windows-1252) olarak okunur
MySQL'in latin1 kodlaması Windows-1252'dir; bu tür dökümlerin olağan kodlamasıdır.
Rapor satırı: charset_guessed
sjis, cp932, gbk, big5 dumps
uyarıyla UTF-8 olarak okunur
Bu kodlamalar henüz çözülmüyor.
Rapor satırı: unsupported_charset
UNHEX('..'), CONVERT(b'..', UNSIGNED), CONVERT(".." USING x), ST_GeomFromText('..') in rows
hesaplanır
Bazı döküm araçları değerleri bu çağrılar olarak yazar; bunlar ürettikleri değerler olarak okunur, coğrafi WKT'de boylam başa alınır.
other expressions in rows
NULL
Veritabanı çalıştırmayan bir dönüştürücü bunları hesaplayamaz.
Rapor satırı: expression_value
DEFAULT in VALUES
sütunun varsayılan değeri
Sabit bir varsayılan değer satıra kopyalanır.
Rapor satırı: default_keyword_filled
DEFAULT in VALUES without a literal default
NULL
Kopyalanacak bir değer yok.
Rapor satırı: default_keyword_null
REPLACE and INSERT IGNORE
düz satırlar
Bir dökümde her anahtar için bir satır vardır, bu yüzden satırlar aynıdır.
Rapor satırı: replace_as_insert
types IntoSQL doesn't know
TEXT
Metin her değeri tutar; yüklemeden sonra türü değiştirin.
Rapor satırı: unknown_type
values that don't fit their column
NULL
Hasarlı veya elle yazılmış bir döküm, sütununun tutamayacağı değerler içerebilir; geri kalanın yüklenmesi için bunlar NULL olur.
Rapor satırı: invalid_value_null
unreadable geometries
NULL
Geometri olmayan baytlar geometri olarak saklanamaz.
Rapor satırı: bad_geometry
CREATE SEQUENCE (MariaDB)
oluşturulmaz
SQLite'ta sequence yoktur.
Rapor satırı: sequence_not_converted
VECTOR(n) (MariaDB 11.7+)
float'ları JSON dizisi olarak tutan TEXT
SQLite'ta vektör türü yoktur; bir JSON dizisi her float'ı korur.
Rapor satırı: type_replaced
| MariaDB içinde | SQLite içinde | Rapor satırı |
|---|---|---|
| TINYINT(1), BOOL | değerleri olduğu gibi INTEGERSQLite'ta boolean türü yoktur; true ve false 1 ve 0 tam sayılarıdır, bu yüzden her değer anlamını korur. | |
| UNSIGNED integers | negatif olmadığını denetleyen bir CHECK ile INTEGER; 2^63-1 üzerindeki değerleri tutan BIGINT UNSIGNED TEXT olurSQLite tam sayıları 64 bit ve işaretlidir. CHECK, MySQL'deki gibi negatif değerleri dışarıda tutar; işaretli aralığı aşan değerler hiçbir basamak kaybolmasın diye metin olarak korunur. | unsigned_widened |
| ZEROFILL and display widths | kaldırılırSıfır dolgusu bir sayının gösterilme biçimidir, sayının parçası değildir. Sayılar korunur; dolgu önemliyse okurken biçimlendirin. | zerofill_dropped |
| FLOAT(M,D) | ölçek olmadan REALSQLite'ta kayan noktalı sayıların sabit ölçeği yoktur. Saklanan değerler olduğu gibi kopyalanır. | float_scale_dropped |
| DECIMAL(p,s) | 15 basamağa kadar DECIMAL(p,s); ötesi TEXTSQLite bir sayıda yaklaşık 15 anlamlı basamak tutar. Daha geniş ondalıklar her basamak tam kalsın diye metin olarak korunur. | decimal_as_text |
| BIT(1), BIT(n) | bitlerin değeriyle INTEGER; BIT(64) TEXT basamakları olarakBir bit alanı, bitlerinin oluşturduğu sayı olarak saklanır. BIT(64)'ün en üst biti işaretli bir tam sayıya sığmaz, bu yüzden sayısı metin olarak korunur. | |
| zero, partial or impossible dates (0000-00-00, 2024-02-30) | NULLSQLite'ın tarih fonksiyonları yalnızca gerçek takvim tarihlerini okur. Bunlar NULL olur ve rapor, diğer tüm veritabanlarında olduğu gibi, bunları sayar. | invalid_date_null |
| NOT NULL columns with values that become NULL | NOT NULL kaldırılırDeğerleri NULL olmak zorunda kalan bir sütun NOT NULL kısıtını koruyamaz, yoksa yükleme durur. | not_null_relaxed |
| DEFAULT '0000-00-00' | varsayılan değer yokGerçek bir tarih olmayan bir varsayılan değer, uydurma bir tarihle değiştirilmek yerine dışarıda bırakılır. | zero_date_default |
| TIME | süreler dahil, MySQL'in yazdığı şekliyle TIME metniSQLite zamanları metin olarak tutar, bu yüzden bir günü aşan veya sıfırın altındaki süreler tam olarak korunur. | |
| YEAR | aralığını denetleyen bir CHECK ile INTEGERSQLite'ta yıl türü yoktur; CHECK, MySQL'in izin verdiği değerlerin aynısını korur. | |
| CHAR(n), VARCHAR(n) | VARCHAR(n), zorunlu tutulmazSQLite tanımlanan türü araçların okuması için tutar ama uzunluğu sınırlamaz; değerler MySQL'in döndürdükleridir. | |
| DATETIME | ISO 8601 metni olarak DATETIMESQLite tarihleri, tarih fonksiyonlarının okuduğu metin olarak saklar. | |
| TIMESTAMP | UTC'de ISO 8601 metni olarak TIMESTAMP; dökümün belirttiği saat dilimi, belirtmiyorsa UTCTIMESTAMP bir andır ve UTC olarak yazılır. Dökümler değeri yazdıkları saat dilimini belirtir (mysqldump UTC yazar); bu bilgi yoksa değerler UTC olarak okunur ve rapor bunu belirtir. | timestamp_zone_assumed |
| ENUM | değerlerini denetleyen bir CHECK ile TEXTCHECK ile metin aynı değerleri korur. | |
| ENUM holding '' (MySQL's error value) | CHECK'in izin verdiği boş değerMySQL, esnek bir SQL modunda bir ENUM'a geçersiz bir değer girildiğinde boş bir dize saklar. Bu satırlar korunur ve CHECK onlara izin verir. | enum_invalid_value |
| ENUM holding values outside its list | CHECK yokListede adı geçmeyen değerler CHECK'ten geçemez; bu yüzden CHECK oluşturulmaz. | enum_check_skipped |
| SET | MySQL'in yazdığı şekliyle TEXT ('a,b')SQLite'ta dizi yoktur; metin MySQL'in döndürdüğü metindir. | |
| JSON | TEXTSQLite'ın JSON fonksiyonları JSON'u metinden okur. JSON olarak tanımlanan bir sütun "123" değerini sayıya çevirirdi, bu yüzden TEXT olur. | |
| NUL bytes in text | korunurSQLite metni NUL baytı tutabilir, bu yüzden değer olduğu gibi kopyalanır. | |
| text that isn't valid in its character set | hatalı baytlar yerine koyma karakteri olarakSQLite metni UTF-8'dir; fonksiyonları UTF-8 olmayan baytları yanlış okur. | invalid_utf8_replaced |
| text decoded twice (ñ) | olduğu gibi kopyalanırDöküm tam olarak bu karakterleri içerir, bu yüzden kopyalanırlar; rapor onları gösterir. | mojibake_suspected |
| AUTO_INCREMENT | sayacı kopyalanan id'lerin ötesine ayarlanmış INTEGER PRIMARY KEY AUTOINCREMENTSQLite tam bir tam sayı birincil anahtarı sayar. AUTOINCREMENT, MySQL'deki gibi id'lerin yeniden kullanılmasını önler ve sayaç en yüksek id'den veya dökümün AUTO_INCREMENT değerinden (hangisi büyükse) sonra devam eder. | |
| AUTO_INCREMENT on part of a key or outside one | sayaçsız INTEGERSQLite yalnızca birincil anahtarın tamamı olan bir sütunu sayar; bu yüzden sütun değerlerini korur ve yeni satırların kendi değerleri gerekir. | identity_without_counter |
| ON UPDATE CURRENT_TIMESTAMP | bir AFTER UPDATE tetikleyicisiTetikleyici, bir satır değiştiğinde ve güncelleme sütunu ayarlamadıysa, MySQL'deki gibi sütunu geçerli zamana ayarlar. | on_update_trigger |
| generated columns | kaynaktaki gibi GENERATED ALWAYS AS, VIRTUAL veya STOREDSQLite 3.31 ve sonrası üretilen sütunları aynı iki şekilde hesaplar. | |
| generated columns with functions SQLite lacks | düz bir sütunSQLite için yazılamayan bir formül, düz bir sütun ve bir rapor satırı bırakır. | generated_not_translated |
| INVISIBLE columns | normal sütunlarSQLite'ta görünmez sütunlar yoktur. | invisible_column |
| CHECK constraints | çevrilir, CREATE TABLE içinde satır içiSQLite CHECK kısıtlarını yalnızca CREATE TABLE içinde kabul eder. | |
| CHECK constraints with functions SQLite lacks | oluşturulmazSQLite için yazılamayan bir CHECK kısıtı dışarıda bırakılır ve raporlanır. | check_skipped |
| CHECK ... NOT ENFORCED | oluşturulmazMySQL bu CHECK kısıtlarını uygulamadan tutar, bu yüzden satırlar onları ihlal edebilir. | check_not_enforced |
| defaults with functions SQLite lacks | varsayılan değer yokSQLite için yazılamayan bir varsayılan değer dışarıda bırakılır ve raporlanır. | default_not_translated |
| keys and indexes on a prefix, c(20) | substr(c, 1, 20) üzerinde bir indeksSQLite ifadeleri indeksler; bu yüzden aynı önek indekslenir ve benzersiz bir önek benzersiz kalır. | prefix_unique |
| FULLTEXT indexes | oluşturulmazSQLite metni, kendi sorgularını gerektiren ayrı FTS5 tablolarıyla arar. | fulltext_not_created |
| SPATIAL indexes | oluşturulmazSQLite'ta bir sütun üzerinde uzamsal indeks yoktur. | spatial_index_not_created |
| functional indexes SQLite can't write | oluşturulmazSQLite için yazılamayan bir ifade üzerindeki indeks dışarıda bırakılır ve raporlanır. | index_skipped |
| foreign keys | CREATE TABLE içinde, denetlenmeden yüklenir, ardından PRAGMA foreign_key_check ile listelenirSQLite yabancı anahtarları yalnızca CREATE TABLE içinde kabul eder ve yalnızca PRAGMA foreign_keys açıkken denetler. Satırlar MySQL'deki gibi denetlenmeden yüklenir ve betik, üst satırı olmayan her satırı listeleyerek biter. | |
| foreign keys to columns without a unique key | oluşturulmazSQLite, başvurulan sütunlarda benzersiz bir anahtar ister; InnoDB istemez. | foreign_key_skipped |
| table, index and column names | yazıldığı gibi; yalnızca büyük/küçük harfle ayrıldıklarında veya bir indeks adı tekrarlandığında yeniden adlandırılırSQLite adları büyük/küçük harf ayırmaz ve indeks adları veritabanı başına tek bir ad alanını paylaşır. | identifier_renamed |
| GEOMETRY, POINT, POLYGON... | BLOB içinde WKBStandart WKB ikili biçimi her geometriyi tam olarak korur. | geometry_as_blob |
| INET4, INET6, UUID (MariaDB) | TEXTSQLite'ta bu türler yoktur; metin MariaDB'nin döndürdüğü metindir. | |
| BINARY, VARBINARY, BLOB | BLOBBaytlar bayt olarak kalır. | |
| PARTITION BY | tek tabloSatırlar aynıdır. | partitions_dropped |
| WITH SYSTEM VERSIONING (MariaDB) | mevcut satırları içeren bir tabloDöküm yalnızca mevcut satırları içerir. | system_versioning_dropped |
| MyISAM, MEMORY and other engines | normal bir tabloSQLite'ın tek bir tablo motoru vardır. | engine_dropped |
| dumps of several databases | tek dosya, her tablonun adı önce veritabanının adıyla başlarBir SQLite dosyası tek bir veritabanıdır; bu yüzden veritabanı adı aynı adlı tabloları birbirinden ayırır. | databases_merged |
| views, triggers, procedures, functions and events | raporda listelenirKodları MySQL'in dilinde yazılmıştır, bu yüzden yeniden oluşturmanız için listelenirler. | not_converted_objects |
| dumps without CREATE TABLE | değerlerden okunan türler--no-create-info ile alınan bir dökümde yalnızca satırlar vardır, bu yüzden türler değerlerden gelir. | no_schema |
| geometries in a dump without CREATE TABLE | BLOB içinde WKBMySQL'in geometri biçimi değerlerden tanınır ve standart WKB olarak saklanır. | geometry_as_blob |
| _ci collations | tam karşılaştırmaSQLite, aksi belirtilmedikçe metni tam olarak karşılaştırır ve NOCASE yalnızca ASCII harflerini eşler. | case_insensitive_collation |
| SET NAMES utf8 from utf8mb4 tables | dönüştürülür, uyarıylaMySQL 5.x mysqldump varsayılan olarak 3 baytlık utf8 yazar ve herhangi bir dönüştürücü dosyayı görmeden önce her emojiyi soru işaretiyle değiştirir. | dump_lost_four_byte_chars |
| dumps without SET NAMES whose text isn't UTF-8 | Latin-1 (Windows-1252) olarak okunurMySQL'in latin1 kodlaması Windows-1252'dir; bu tür dökümlerin olağan kodlamasıdır. | charset_guessed |
| sjis, cp932, gbk, big5 dumps | uyarıyla UTF-8 olarak okunurBu kodlamalar henüz çözülmüyor. | unsupported_charset |
| UNHEX('..'), CONVERT(b'..', UNSIGNED), CONVERT(".." USING x), ST_GeomFromText('..') in rows | hesaplanırBazı döküm araçları değerleri bu çağrılar olarak yazar; bunlar ürettikleri değerler olarak okunur, coğrafi WKT'de boylam başa alınır. | |
| other expressions in rows | NULLVeritabanı çalıştırmayan bir dönüştürücü bunları hesaplayamaz. | expression_value |
| DEFAULT in VALUES | sütunun varsayılan değeriSabit bir varsayılan değer satıra kopyalanır. | default_keyword_filled |
| DEFAULT in VALUES without a literal default | NULLKopyalanacak bir değer yok. | default_keyword_null |
| REPLACE and INSERT IGNORE | düz satırlarBir dökümde her anahtar için bir satır vardır, bu yüzden satırlar aynıdır. | replace_as_insert |
| types IntoSQL doesn't know | TEXTMetin her değeri tutar; yüklemeden sonra türü değiştirin. | unknown_type |
| values that don't fit their column | NULLHasarlı veya elle yazılmış bir döküm, sütununun tutamayacağı değerler içerebilir; geri kalanın yüklenmesi için bunlar NULL olur. | invalid_value_null |
| unreadable geometries | NULLGeometri olmayan baytlar geometri olarak saklanamaz. | bad_geometry |
| CREATE SEQUENCE (MariaDB) | oluşturulmazSQLite'ta sequence yoktur. | sequence_not_converted |
| VECTOR(n) (MariaDB 11.7+) | float'ları JSON dizisi olarak tutan TEXTSQLite'ta vektör türü yoktur; bir JSON dizisi her float'ı korur. | type_replaced |
Betiği SQLite veritabanına yükleyin
Betik tabloları oluşturur, satırları kopyalar, ardından anahtarları, indeksleri ve yabancı anahtarları ekler; böylece hızlı yüklenir ve ilk hatada durur.
sqlite3 -bail mydb.sqlite < mariadb.sqlite.sqlYabancı anahtarlar her tabloda tanımlanır ve satırlar yabancı anahtar denetimleri kapalıyken yüklenir. Betik ardından, yarı yolda başarısız olmak yerine, var olmayan bir satıra işaret eden her satırı listeler.
Büyük bir döküm için yerel bir diskte yeni bir dosyaya yükleyin. Betik her şeyi senkronizasyon kapalı tek bir işlemde yükler; böylece disk hızında çalışır ve yarı yolda duran bir yükleme yarım tablo bırakmaz.
Komut satırı dosyayı doğrudan bir SQLite veritabanına yükler; betik yazmanız gerekmez. Ücretsizdir.
En iyi sonuç için MariaDB dökümü nasıl alınır
Dönüştürücü, dökümün içerdiğini okur. Bu seçenekler verilerinizin daha fazlasını dökümde tutar:
- --default-character-set=utf8mb4 emoji ve diğer 4 baytlık karakterleri korur; utf8mb3 dökümü bunları dönüştürücü görmeden önce kaybeder.
- --hex-blob ikili sütunları ve VECTOR değerlerini onaltılık olarak yazar; bu biçim sistemler arasında kopyalamada bozulmaz.
- --routines --triggers --events bu nesneleri döküme ekler; böylece rapor onları listeleyebilir.
Neler dönüştürülmez
Görünümler, tetikleyiciler, saklı yordamlar, fonksiyonlar ve olaylar MariaDB'in kendi dilinde yazılır. Raporda adlarıyla listelenirler, asla sessizce atlanmazlar; böylece onları SQLite için yeniden yazabilirsiniz.
MariaDB - SQLite dönüştürme hakkında sorular
Yanıtınızı bulamadınız mı? İletişim sayfasından bize yazın, bir kişi yanıt verir. İletişim sayfası
Dökümüm yükleniyor mu?
Hayır. Dönüştürücü tarayıcınızda çalışır ve dökümü diskinizden parça parça okur; böylece döküm bilgisayarınızdan hiç çıkmaz. Masaüstü uygulaması ve komut satırı da bilgisayarınızda dönüştürür.
Döküm ne kadar büyük olabilir?
Dönüştürücü dökümün tamamını asla bellekte tutmaz: dosyayı aralıklar halinde iki kez okur ve betiği ilerledikçe yazar. Birkaç gigabaytlık dökümler tarayıcıda, masaüstü uygulamasında ve komut satırıyla dönüştürülür.
Döküm hangi MariaDB sürümlerinden gelebilir?
MariaDB 10.3 ile 12 arasında mariadb-dump ve mysqldump ile alınmış, tablo başına bir INSERT veya satır başına bir INSERT içeren dökümler. Her test dökümü MariaDB 10.11, 11.4 ve 11.8'den gelir ve kaynağıyla hücre hücre karşılaştırılır.
UUID, INET6, JSON ve VECTOR sütunları korunuyor mu?
UUID ve INET sütunları text, JSON text, VECTOR ise float'larından oluşan bir JSON dizisi olur. Sıfır tarihler NULL olur ve rapor onları sayar.
AUTO_INCREMENT değerleri ve sequence'lar korunuyor mu?
Tablonun birincil anahtarının tamamı olan bir AUTO_INCREMENT sütunu INTEGER PRIMARY KEY AUTOINCREMENT olur ve en yüksek id'den sonra devam eder. SQLite'de sequence olmadığı için sequence'lar raporlanır.
Saklı yordamlar ve tetikleyiciler ne olur?
Raporda adlarıyla listelenirler ve dönüştürülmezler, çünkü her veritabanı onları kendi dilinde yazar.
Betik hangi SQLite sürümlerinde yüklenir?
SQLite 3.31 ve sonrası. Her test dökümü 3.31 ve 3.54 üzerinde yüklenir ve bir sorun çıkarsa ilk hatada durur.