Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Microsoft SQL Server -> MySQL
Forum PHP.pl > Forum > Bazy danych
sivy
Witam.

Mam pytanie, co muszę zmienić, żeby
plik sql'owy (dedykowany najprawdopodobniej
dla Microsoft SQL Server) działał pod MySQL ?

  1. CREATE TABLE CHECKEXACT (
  2. EXACTID INT IDENTITY(1,1) NOT NULL ,
  3. USERID INT NULL DEFAULT 0,
  4. [DATE] DATETIME NULL,
  5. CONSTRAINT EXACTID PRIMARY KEY (EXACTID)
  6. )
  7. ;


generuje błąd:

  1. mysql> source d:/rcp.sql;
  2. ERROR 1064 (42000): You have an error IN your SQL syntax; CHECK the manual that
  3. corresponds TO your MySQL server version FOR the RIGHT syntax TO USE near 'IDENT
  4. ITY(1,1) NOT NULL ,
  5. USERID INT NULL DEFAULT 0,
  6. [DATE] DATET' at line 2



-------------------------------------------
-------------------------------------------


  1. CREATE TABLE CHECKINOUT (
  2. USERID INT NOT NULL ,
  3. CHECKTIME DATETIME NOT NULL DEFAULT GETDATE(),
  4. CHECKTYPE VARCHAR (1) NULL DEFAULT 'I',
  5. CONSTRAINT USERCHECKTIME PRIMARY KEY (USERID, CHECKTIME)
  6. )
  7. ;


generuje błąd:

  1. ERROR 1064 (42000): You have an error IN your SQL syntax; CHECK the manual that
  2. corresponds TO your MySQL server version FOR the RIGHT syntax TO USE near 'GETDA
  3. TE(),
  4. CHECKTYPE VARCHAR (1) NULL DEFAULT 'I',
  5. VERIFYCODE INT NULL ' at line 3
  6. mysql>


Z góry dzięki za pomoc,
Pozdrawiam.
osiris
odnosnie
  1. CREATE TABLE CHECKEXACT (
  2. EXACTID INT IDENTITY(1,1) NOT NULL ,
  3. USERID INT NULL DEFAULT 0,
  4. [DATE] DATETIME NULL,
  5. CONSTRAINT EXACTID PRIMARY KEY (EXACTID)
  6. );

MySQL nie obsluguje takiego typu jak INT IDENTITY (uzyj samo INT), najprawdopodobniej bedziesz musial tez zamienic [DATE] na `DATE` (DATE jest slowem kluczowym jezyka SQL, dlatego jesli chcesz go uzyc jako identyfikator - w tym przypadku nazwa pola - to musisz go jakos "wyroznic", a jesli dobrze pamietam to MySQL uzywa do tego tylko odwroconych apostrofow).

  1. CREATE TABLE CHECKINOUT (
  2. USERID INT NOT NULL ,
  3. CHECKTIME DATETIME NOT NULL DEFAULT GETDATE(),
  4. CHECKTYPE VARCHAR (1) NULL DEFAULT 'I',
  5. CONSTRAINT USERCHECKTIME PRIMARY KEY (USERID, CHECKTIME)
  6. );

Funkcja GETDATE() jest funkcja niedeterministryczna i nie moze byc uzyta jako wartosc domyslna dla pola CHECKTIME. Najprosciej poradzic sobie z tym problemem za pomoca triggera, lub zmienic typ kolumny na TIMESTAMP i jako wartosci domyslnej uzyc CURRENT_TIMESTAMP, ale wtedy jesli bedziesz chcial pobrac date i czas to bedziesz musial uzyc rzutowania (funkcja CAST).

Pozdrawiam
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.