convert sqlite to mysql
1. schema 먼저
sqlite3 xxxx.db
>.output schema.sql
>.schema
mysql와 sqlite의 차이가 매우 큽니다.sed 스크립트를 써서 schema,sql를 변경합니다. 쓰면서 측정하고 복사할 수 없습니다.
#!/bin/sed -f
#filename : schema.sed
#author: authur
#date : 2012-7-24
s/\(CREATE TABLE \)"\(\S*\)"/\1\2/
/\bid\b[^,]*PRIMARY KEY/s/PRIMARY KEY/AUTO_INCREMENT PRIMARY KEY/g
/[CREATE TABLE|integer|varchar]/s/"/`/g
/CREATE TABLE/s/\(text[^,]*\)DEFAULT[^,]*,/\1,/g
/CREATE TABLE.*workshop_blog/s/DEFAULT 'interview'//g
/CREATE TABLE.*workshop_topic/s/DEFAULT 'faq'//g
s/djangoratings_vote_content_type_id__object_id__cookie__user_id__key__ip_address/djratings_vote_ctype_id_object_id_cookie_user_id_key_ip_address/
s/djangoratings_vote_content_type_id__object_id__key__user_id__ip_address/djratings_vote_ctype_id_object_id_key_user_id_ip_address/
./schema.sed schema.sql > schema-mysql.sql
2. 데이터
데이터가 더 붕괴됩니다. mysql utf 문자 집합은 대소문자 민감성을 지원하지 않습니다. 데이터 형식도 지원하지 않습니다. 오류가 많습니다.
sqlite3 xxxx.db
>.output dump.sql
>.dump
먼저 schema를 수정합니다.sed는 다음과 같습니다.
#!/bin/sed -f
#filename : schema.sed
#author: authur
#date : 2012-7-24
s/\(CREATE TABLE \)"\(\S*\)"/\1\2/
/\bid\b[^,]*PRIMARY KEY/s/PRIMARY KEY/AUTO_INCREMENT PRIMARY KEY/g
/[CREATE TABLE|integer|varchar]/s/"/`/g
/CREATE TABLE/s/\(text[^,]*\)DEFAULT[^,]*,/\1,/g
/CREATE TABLE.*workshop_blog/s/DEFAULT 'interview'//g
/CREATE TABLE.*workshop_topic/s/DEFAULT 'faq'//g
s/djangoratings_vote_content_type_id__object_id__cookie__user_id__key__ip_address/djratings_vote_ctype_id_object_id_cookie_user
_id_key_ip_address/
s/djangoratings_vote_content_type_id__object_id__key__user_id__ip_address/djratings_vote_ctype_id_object_id_key_user_id_ip_addr
ess/
s/PRAGMA foreign_keys=OFF;/SET foreign_key_checks = 0;/
s/BEGIN TRANSACTION;/START TRANSACTION;/
s/\(INSERT INTO \)"\(\S*\)"/\1\2/
그리고../schema.sed dump.sql > dump-mysql.sql
여기까지 만약 네가 큰 공이 이미 이루어졌다고 생각한다면 너는 틀렸다. 데이터가 유도될 수 있을지 없을지는 아직 확실하지 않다
우선 덤프-mysql을 시도해 보세요.sql에서 mysql를 가져옵니다. 대소문자가 민감하지 않아서 Duplicate 키나 다른 오류가 발생한 것을 발견하면 다음 방법을 시도해 보십시오.
mysql collation 설정cnf에 추가
[mysqld]
character-set-server=latin1 collation-server=latin1_general_cs #_cs는 마무리가 다 돼요. cs는 case sensitive, ci는 case insensitive, utf8은 없어요cs 마무리
mysql를 다시 시작해 보십시오.
만약 중국어로 unique 키를 만들면 가져오는 것도 기본적으로 문제가 있다. unique 키를 만들면 앞의 두 글자만 구별할 수 있을 것 같다. 니마.이걸 어떻게 해결할지, 업무를 봐야지. 내가 좀 거칠게 할게. 키 앞에 랜덤 문자를 붙여서 내가 알아서 할게.
update workshop_tag set name = substr(abs(random()), 1, 10) || name;
그리고 다시 덤프, schema로.sed 처리
이 두 문제를 처리했습니다. 저는 지금 데이터를 mysql로 가져올 수 있습니다. 중간에 숨겨진 문제가 있는지 없는지는 아무도 모르겠습니다. 우선 이렇게 사용하세요.
ps. 모든 것을 백업해서 돌릴 수도 돌아갈 수도 없으면 골치 아프게 하지 마라.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
MySQL에서 JSON 인덱싱 - aarondfrancis사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 말하지만 완전히 정확하지는 않습니다. MySQL로 JSON 열을 인덱싱하는 것은 완전히 가능합니다! 사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.