İçeriğe geç
IntoSQL ana sayfası

MySQL - SQLite dönüştürme

mysqldump, mariadb-dump, mysqlpump, 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 tarafından olduğu gibi tutulamayan her değer ve taşınmayan her nesne raporda listelenir.

Dosyanız
sqlshop_2024.sqlÖrnek dosya, 5,1 kB
Veritabanınız

18 satır dönüştürüldü, 8 düzeltme, reddedilen yok

Göster

shop_2024.sql içindeki tablolarMySQL 8.0.46 dökümü · mysqldump ile yazıldı · utf8mb4

  • customers8 satır3
    7 sütun
    idINTEGER not null
    nameVARCHAR(100) not null
    emailVARCHAR(150) not null
    countryVARCHAR(2) not null
    is_activeINTEGER not null
    signed_upDATE
    created_atTIMESTAMP not null
  • orders10 satır5
    9 sütun
    idINTEGER not null
    customer_idINTEGER not null
    statusTEXT not null
    totalDECIMAL(10,2) not null
    itemsINTEGER not null
    ordered_atDATETIME not null
    shipped_atDATETIME
    noteVARCHAR(255)
    updated_atTIMESTAMP 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,
    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),
    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) VALUES
(1,'Ana Martínez','ana@example.com','MX',1,'2023-01-15','2023-01-15 10:24:00'),
(2,'Zoë Müller','zoe@example.de','DE',1,'2023-02-03','2023-02-03 08:11:42'),
(3,'José Peña','jose@example.es','ES',0,'2023-03-21','2023-03-21 19:05:17'),
(4,'李雷','lilei@example.cn','CN',1,'2023-05-09','2023-05-09 02:40:00'),
(5,'Noah O''Brien','noah@example.ie','IE',1,NULL,'2023-06-30 14:00:00'),
(6,'Amélie Laurent','amelie@example.fr','FR',1,'2024-01-02','2024-01-02 09:30:00'),
(7,'Ravi Patel','ravi@example.in','IN',0,'2024-02-29','2024-02-29 23:59:59'),
(8,'Sofia Rossi 🌻','sofia@example.it','IT',1,'2024-04-12','2024-04-12 12:12:12');
INSERT INTO orders (id, customer_id, status, total, items, ordered_at, shipped_at, note, updated_at) VALUES
(1,1,'shipped',129.90,3,'2024-03-01 10:00:00','2024-03-02 16:30:00',NULL,'2024-03-02 16:30:00'),
(2,2,'paid',54.00,1,'2024-03-02 11:15:00',NULL,'Gift wrap 🎁','2024-03-02 11:20:00'),
(3,1,'cancelled',12.50,1,'2024-03-03 09:45:00',NULL,'Customer changed their mind','2024-03-03 10:00:00'),
(4,4,'shipped',980.00,12,'2024-03-05 02:10:00','2024-03-07 08:00:00','请小心轻放','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','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"','2024-03-11 09:00:00'),
(7,8,'paid',76.20,2,'2024-03-11 18:45:00',NULL,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','2024-03-12 08:00:00'),
(9,3,'shipped',64.00,2,'2024-03-14 15:30:00',NULL,'Shipping date never recorded','2024-03-15 10:00:00'),
(10,7,'paid',1499.00,1,'2024-03-15 21:05:00',NULL,'C:\Users\ravi\invoice.pdf','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)
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

  1. customers tablosunun "id" sütunu işaretsiz; bu yüzden negatif olmadığını denetleyen bir CHECK ile INTEGER oldu.
  2. customers tablosunun "signed_up" sütunu artık NULL kabul ediyor: bazı değerleri saklanamadı ve NULL oldu.
  3. 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.
  4. orders tablosunun "customer_id" sütunu işaretsiz; bu yüzden negatif olmadığını denetleyen bir CHECK ile INTEGER oldu.
  5. orders tablosunun "id" sütunu işaretsiz; bu yüzden negatif olmadığını denetleyen bir CHECK ile INTEGER oldu.
  6. orders tablosunun "items" sütunu işaretsiz; bu yüzden negatif olmadığını denetleyen bir CHECK ile INTEGER oldu.
  7. 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.
  8. orders tablosunun "updated_at" sütunu her güncellemede geçerli zamana ayarlanıyor; SQLite'de bunu bir tetikleyici yapıyor.

Kontrol edilmeli

  • 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 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:

MySQL 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

MySQL içindeSQLite içindeRapor satırı
TINYINT(1), BOOLdeğ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 integersnegatif 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 widthskaldı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 NULLNOT 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
TIMEsü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.
YEARaralığı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.
DATETIMEISO 8601 metni olarak DATETIMESQLite tarihleri, tarih fonksiyonlarının okuduğu metin olarak saklar.
TIMESTAMPUTC'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
ENUMdeğ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 listCHECK yokListede adı geçmeyen değerler CHECK'ten geçemez; bu yüzden CHECK oluşturulmaz.enum_check_skipped
SETMySQL'in yazdığı şekliyle TEXT ('a,b')SQLite'ta dizi yoktur; metin MySQL'in döndürdüğü metindir.
JSONTEXTSQLite'ı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 textkorunurSQLite metni NUL baytı tutabilir, bu yüzden değer olduğu gibi kopyalanır.
text that isn't valid in its character sethatalı 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_INCREMENTsayacı 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 onesayaç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_TIMESTAMPbir 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 columnskaynaktaki gibi GENERATED ALWAYS AS, VIRTUAL veya STOREDSQLite 3.31 ve sonrası üretilen sütunları aynı iki şekilde hesaplar.
generated columns with functions SQLite lacksdü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 columnsnormal 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 lacksoluşturulmazSQLite için yazılamayan bir CHECK kısıtı dışarıda bırakılır ve raporlanır.check_skipped
CHECK ... NOT ENFORCEDoluşturulmazMySQL bu CHECK kısıtlarını uygulamadan tutar, bu yüzden satırlar onları ihlal edebilir.check_not_enforced
defaults with functions SQLite lacksvarsayı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 indexesoluşturulmazSQLite metni, kendi sorgularını gerektiren ayrı FTS5 tablolarıyla arar.fulltext_not_created
SPATIAL indexesoluşturulmazSQLite'ta bir sütun üzerinde uzamsal indeks yoktur.spatial_index_not_created
functional indexes SQLite can't writeoluşturulmazSQLite için yazılamayan bir ifade üzerindeki indeks dışarıda bırakılır ve raporlanır.index_skipped
foreign keysCREATE 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 keyoluşturulmazSQLite, başvurulan sütunlarda benzersiz bir anahtar ister; InnoDB istemez.foreign_key_skipped
table, index and column namesyazı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, BLOBBLOBBaytlar bayt olarak kalır.
PARTITION BYtek 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 enginesnormal bir tabloSQLite'ın tek bir tablo motoru vardır.engine_dropped
dumps of several databasestek 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 eventsraporda listelenirKodları MySQL'in dilinde yazılmıştır, bu yüzden yeniden oluşturmanız için listelenirler.not_converted_objects
dumps without CREATE TABLEdeğ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 TABLEBLOB içinde WKBMySQL'in geometri biçimi değerlerden tanınır ve standart WKB olarak saklanır.geometry_as_blob
_ci collationstam 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 tablesdö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-8Latin-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 dumpsuyarıyla UTF-8 olarak okunurBu kodlamalar henüz çözülmüyor.unsupported_charset
UNHEX('..'), CONVERT(b'..', UNSIGNED), CONVERT(".." USING x), ST_GeomFromText('..') in rowshesaplanı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 rowsNULLVeritabanı çalıştırmayan bir dönüştürücü bunları hesaplayamaz.expression_value
DEFAULT in VALUESsütunun varsayılan değeriSabit bir varsayılan değer satıra kopyalanır.default_keyword_filled
DEFAULT in VALUES without a literal defaultNULLKopyalanacak bir değer yok.default_keyword_null
REPLACE and INSERT IGNOREdü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 knowTEXTMetin her değeri tutar; yüklemeden sonra türü değiştirin.unknown_type
values that don't fit their columnNULLHasarlı 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 geometriesNULLGeometri 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 < mysql.sqlite.sql

Yabancı 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 MySQL 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; utf8 dökümü bunları dönüştürücü görmeden önce kaybeder.
  • --hex-blob ikili sütunları 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 her veritabanının kendi dilinde yazılır. Raporda adlarıyla listelenirler, asla sessizce atlanmazlar; böylece onları SQLite için yeniden yazabilirsiniz.

MySQL - 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.

MariaDB dökümlerini okuyor mu?

Evet. mariadb-dump ile alınan dökümler ve MariaDB 10.3 ile 12 arası sürümlerin dökümleri, MariaDB'nin INET6, INET4 ve UUID sütunları dahil, aynı şekilde dönüştürülür.

0000-00-00 tarihlerine ne olur?

NULL olurlar: SQLite metni saklardı, ancak hiçbir şey 0000-00-00 değerini tarih olarak okumaz. Rapor her sütunda kaç tane olduğunu söyler.

AUTO_INCREMENT değerleri korunuyor mu?

Evet. Tablonun birincil anahtarının tamamı olan bir AUTO_INCREMENT sütunu INTEGER PRIMARY KEY AUTOINCREMENT olur, her satır kendi id'sini korur ve sonraki id en yüksek id'den sonra devam eder. Diğer AUTO_INCREMENT sütunları değerlerini sayaçsız korur ve rapor bunu belirtir.

TINYINT(1) boolean olur mu?

Hayır. SQLite içinde boolean türü yoktur; bu yüzden TINYINT(1) bir INTEGER olur ve her değer olduğu gibi kalır.

Saklı yordamlar ve tetikleyiciler ne olur?

Raporda adlarıyla listelenirler ve dönüştürülmezler, çünkü her veritabanı onları kendi dilinde yazar. ON UPDATE CURRENT_TIMESTAMP istisnadır: bir SQLite tetikleyicisine dönüşür.

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.