MySQL-problem

Elektronik- och mekanikrelaterad mjukvara/litteratur. (T.ex schema-CAD, simulering, böcker, manualer mm. OS-problem hör inte hit!)
Användarvisningsbild
Rohan
Inlägg: 1063
Blev medlem: 7 april 2004, 08:24:39
Ort: Eksjö, Småland
Kontakt:

MySQL-problem

Inlägg av Rohan »

Har fått problem med MySQL, kan också vara MySQL Query Browser som busar med mig.

Bakgrund:
Jag ska läsa en kurs på distans och måste därför ha en miljö med Apache, MySQL och PHP. Inget konstigt med det. Har en Mac, en PowerBook (med Leopard, 10.5.6) som jag använder och har installerat MySQL och startat Webbdelningen, vilket ger mig allt som behövs. Apache funkar fint, med PHP och allt sånt som kommer med från början. Har inte ändrat så mycket, skapade /etc/my.cnf för MySQL och stoppade in följande i den:

Kod: Markera allt

[mysqld]
default-character-set=utf8
default-collation=utf8_general_ci
character-set-server=utf8
collation-server=utf8_general_ci
init-connect='SET NAMES utf8'

[client]
default-character-set=utf8
Problemet jag har är att när jag använder Query Browsern och skriver ett skript så får jag helskumma felmeddelanden.

Kod: Markera allt

-- Radera databasen om den finns (för att undvika felmeddelanden)
DROP DATABASE IF EXISTS Skolan;

-- Skapa databas
CREATE DATABASE Skolan;

-- Använd databasen
USE Skolan;

-- Skapa en tabell
CREATE TABLE Larare (
	akronymLarare CHAR(3) PRIMARY KEY,
	avdelningLarare CHAR(3),
	namnLarare CHAR(20),
	lonLarare INT,
	foddLarare DATETIME
);
Ger exempelvis följande felmeddelande när jag kör det.

Kod: Markera allt

8: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'n
USE Skol' at line 1
Filen är utf8-kodad och med UNIX-radslut. Jag misstänker att det är ä:et på raden över USE-uttrycket som ställer till det men det är ju en kommentar!?

Ibland får jag felmeddelande 1064 och det verkar på det stora hela inte gå att köra flera frågor 'samtidigt'. Detta är ganska begränsande när man har uppgifter som går ut på att man ska lämna in en hel radda med SQL-frågor i en fil. Jag vill kunna köra allihopa i ett svep utan bråk.

Någon som råkat ut för liknande eller som har någon idé?
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: MySQL-problem

Inlägg av sodjan »

> Jag misstänker att det är ä:et på raden över USE-uttrycket som ställer till det

Jaha, och fungerade det eller fungerade det inte utan "ä" ?
Användarvisningsbild
Rohan
Inlägg: 1063
Blev medlem: 7 april 2004, 08:24:39
Ort: Eksjö, Småland
Kontakt:

Re: MySQL-problem

Inlägg av Rohan »

Ja, jo det funkar utan svenska tecken. (Får be om ursäkt för att jag glömde skriva att jag testat det.)

Det här går igenom.

Kod: Markera allt

-- Radera databasen som finns, nu testar vi utan svenska tecken
DROP DATABASE IF EXISTS Skolan;

-- Skapa en ny databas.
CREATE DATABASE Skolan;

-- Inga svenska tecken... alls
USE Skolan;
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: MySQL-problem

Inlägg av sodjan »

Och "create table" !?

Funkar det eller funkar det inte ??
Varför säger du att det funkar men sen inte har med
"create table" när du visar vad som funkar ? Du hade
ju med det från början... Är det fortfarande något problem ?
Användarvisningsbild
Rohan
Inlägg: 1063
Blev medlem: 7 april 2004, 08:24:39
Ort: Eksjö, Småland
Kontakt:

Re: MySQL-problem

Inlägg av Rohan »

Kod: Markera allt

-- Radera databasen som finns, nu testar vi utan svenska tecken
DROP DATABASE IF EXISTS Skolan;

-- Skapa en ny databas.
CREATE DATABASE Skolan;

-- Inga svenska tecken... alls
USE Skolan;

-- Skapa en tabell
CREATE TABLE Larare (
	akronymLarare CHAR(3) PRIMARY KEY,
	avdelningLarare CHAR(3),
	namnLarare CHAR(20),
	lonLarare INT,
	foddLarare DATETIME
);
Funkar klockrent.

Ändrar jag

Kod: Markera allt

-- Skapa en tabell
till

Kod: Markera allt

-- Skapa en tabell, eller två
så får jag

Kod: Markera allt

11: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 6
Tar jag bort å:et så funkar det.
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: MySQL-problem

Inlägg av sodjan »

OK.
Sannolikt skapar/redigerar du ditt SQL script i något verktyg/editor
som inte stöder samma encoding som databasen är konfigurerad för...
Användarvisningsbild
Rohan
Inlägg: 1063
Blev medlem: 7 april 2004, 08:24:39
Ort: Eksjö, Småland
Kontakt:

Re: MySQL-problem

Inlägg av Rohan »

Efter lite mer testande så har jag nu kommit så långt att jag kan köra mitt skript från Navicat Lite, tyvärr funkar det fortfarande inte med MySQL Query Browser. Filen är sparad som utf8. MySQL QB säger att den anslutit med utf8, MySQL påstår att den ska klara utf8. Men inte.

Lite irriterande att större delen av dagen gått åt till att försöka hitta lösningen på ett fel som inte borde finnas. :?

Tack för hjälpen sodjan.

EDIT: Det funkar för övrigt i terminalen. Får väl hålla mig till den istället. :) Är ju inte fy skam det heller.
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: MySQL-problem

Inlägg av sodjan »

Så länge det bara är kommentarerna som strular så är det väl bara att undvika åäö,
i alla fall tills du hittar en lösning på det. Låt tråden "ligga" några dagar så kanske
någon "som vet" hittar den. Åäö blir ju två-bytes "tecken" i UTF8, så det kanske
strular till sig någonstans på vägen, så att säga.
Användarvisningsbild
JimmyAndersson
Inlägg: 26577
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Re: MySQL-problem

Inlägg av JimmyAndersson »

Nu har ju inte tråden legat några dagar, men jag svarar ändå. :)

"Åäö blir ju två-bytes "tecken" i UTF8"

Det är just detta som orsakar felet. Hur resultatet blir beror lite på programmet som tolkar dessa bytes. T.ex ibland kan denna extra byte förskjuta varje efterföljande tecken ett steg. Ibland skrivs även det sista tecknet över.

"CREATE DATABASE skolan;" blir alltså "REATE DATABASE skolan;". Eller så slås "två" ihop med "CREATE". :)


Att svenska tecken står i en kommentar-rad har alltså ingen betydelse eftersom problemet redan uppstår när filen läses in och "behandlas" med en viss teckenkodning, eller hur man nu ska förklara det.
Ett hett tips är därför att aldrig använda svenska tecken i koden (om den kan bli utsatt för olika typer av teckenkodningar.)
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Re: MySQL-problem

Inlägg av speakman »

Eller konvertera om den till iso-8859-1:

Kod: Markera allt

$ iconv -f UTF8 -t ISO-8859-1 < din_fil.sql > din_fil_8bit.sql
Det där med teckenkodning är ju alltid ett problem. Python (bl.a.) har löst det genom att leta efter en liten styrkod på någon av de två översta raderna i källkodsfilen i formatet "coding: utf-8". Info: http://www.python.org/dev/peps/pep-0263/

En del program försöker gissa teckenkodning, men det fungerar sällan bra. Det borde dock bli lag på att använda utf-8 nuförtiden. 8)
Användarvisningsbild
Rohan
Inlägg: 1063
Blev medlem: 7 april 2004, 08:24:39
Ort: Eksjö, Småland
Kontakt:

Re: MySQL-problem

Inlägg av Rohan »

Det lustiga är att filen är sparad som utf8. När jag sedan öppnar den i MySQL Query Browser så väljer jag att det är en utf8-kodad fil.

Jag testar att köra följande via MySQL Query Browser.

Kod: Markera allt

mysql> SHOW VARIABLES LIKE 'c%';
+--------------------------+---------------------------------------------------------+
| Variable_name            | Value                                                   |
+--------------------------+---------------------------------------------------------+
| character_set_client     | utf8                                                    | 
| character_set_connection | utf8                                                    | 
| character_set_database   | utf8                                                    | 
| character_set_filesystem | binary                                                  | 
| character_set_results    | utf8                                                    | 
| character_set_server     | utf8                                                    | 
| character_set_system     | utf8                                                    | 
| character_sets_dir       | /usr/local/mysql-5.1.30-osx10.5-powerpc/share/charsets/ | 
| collation_connection     | utf8_general_ci                                         | 
| collation_database       | utf8_general_ci                                         | 
| collation_server         | utf8_general_ci                                         | 
| completion_type          | 0                                                       | 
| concurrent_insert        | 1                                                       | 
| connect_timeout          | 10                                                      | 
+--------------------------+---------------------------------------------------------+
14 rows in set (0.08 sec)
Allting pekar mot att svenska tecken - åtminstone i kommentarerna - inte skulle vara ett problem.

Om jag använder terminalen så kan jag skapa databaser och tabeller med svenska tecken i namnen, det enda problemet då är att den räknar byte istället för tecken när den formaterar utskriften.

Kod: Markera allt

mysql> SHOW TABLES;
+-------------------+
| Tables_in_surhål |
+-------------------+
| åäötabellen    | 
+-------------------+
1 row in set (0.01 sec)
Detta är ju däremot ett kosmetiskt problem som man kan leva med.
Skriv svar