Avatar billede tmi Nybegynder
30. marts 2008 - 22:02 Der er 18 kommentarer og
1 løsning

UTF8 AE OE og AA - Må jeg så oprette spørgsmålet nu eller hvad ?

Hejsa

Jeg har en tabel i UTF8, når jeg laver dette udtræk får jeg:

> select title from categories where title like 'å%' limit 10;
+---------------------+
| title              |
+---------------------+
| Aalborg            |
| Aalborg Kommune    |
| Aalborg Universitet |
| Aarhus Universitet  |
| ABBA                |
| ABBA-album          |
| Åbne filformater  |
| Abstraktion        |
| AC/DC-album        |
| Actinider          |
+---------------------+
10 rows in set (0.00 sec)

Å og A er altså blandet sammen! Jeg vil gerne have dem hver for sig, kan det lade sig gøre?
Avatar billede arne_v Ekspert
30. marts 2008 - 22:09 #1
Hvad er COLLATE for tabellen ?
Avatar billede tmi Nybegynder
30. marts 2008 - 22:13 #2
Den er utf8_general_ci, men jeg synes også at have prøvet med utf8_danish_ci og utf8_unicode_ci, kan du få det til at virke?
Avatar billede tmi Nybegynder
30. marts 2008 - 22:17 #3
og undskyld titlen på spørgsmålet men den var helt vildt dum, jeg måtte hverken bruge æ, ø, å eller noget som helst.. :-| Synes ellers æøå beskriver mit spørgsmål helt perfekt..
Avatar billede arne_v Ekspert
30. marts 2008 - 22:20 #4
Ja.

mysql> CREATE TABLE demo (
    ->    id INTEGER NOT NULL PRIMARY KEY,
    ->    s VARCHAR(50)
    -> ) DEFAULT CHARACTER SET utf8 COLLATE utf8_danish_ci;
Query OK, 0 rows affected (0.02 sec)

mysql>
mysql> INSERT INTO demo VALUES (1, 'Aa');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO demo VALUES (2, 'Ac');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO demo VALUES (3, 'B');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO demo VALUES (4, 'Åb');
Query OK, 1 row affected (0.00 sec)

mysql>
mysql> SELECT * FROM demo WHERE s LIKE 'A%';
+----+------+
| id | s    |
+----+------+
|  1 | Aa  |
|  2 | Ac  |
+----+------+
2 rows in set (0.00 sec)

mysql> SELECT * FROM demo WHERE s LIKE 'Å%';
+----+------+
| id | s    |
+----+------+
|  4 | Åb  |
+----+------+
1 row in set (0.00 sec)

mysql>
mysql> DROP TABLE demo;
Query OK, 0 rows affected (0.00 sec)

mysql>
Avatar billede tmi Nybegynder
30. marts 2008 - 22:45 #5
Ja det virker når jeg konverterer tabellen til danish.. Troede ikke Å skulle blandes med A som fx Á på nogen sprog overhovedet..

MySQL skal vidst arbejde lidt med deres understøttelse af multibytes, det driver mig til vandvid :-S

Er det mig der er helt væk fra vinduet eller giver det her ingen mening?

mysql> set names latin1;
Query OK, 0 rows affected (0.00 sec)

mysql> select 'ø', substr('ø',1,1), length('ø');
+----+------------------+--------------+
| ø | substr('ø',1,1) | length('ø') |
+----+------------------+--------------+
| ø | ▒                |            2 |
+----+------------------+--------------+
1 row in set (0.00 sec)

mysql> set names utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> select 'ø', substr('ø',1,1), length('ø');
+----+------------------+--------------+
| ø | substr('ø',1,1) | length('ø') |
+----+------------------+--------------+
| ø | ø              |            2 |
+----+------------------+--------------+
1 row in set (0.00 sec)


Men smid et svar! :-)
Avatar billede tmi Nybegynder
30. marts 2008 - 22:47 #6
Og eksperten skal arbejde på deres html entities, hehe :-D
Avatar billede tmi Nybegynder
30. marts 2008 - 22:56 #7
Og nu gør den iøvrigt også sådan her..

mysql> select substr(title, 1,1) from wiki_articles where title like 'æ%' limit 50;
+--------------------+
| substr(title, 1,1) |
+--------------------+
| Ä                |
| Æ                |
+--------------------+

Det er ikke sådan jeg husker det danske alfabet! :p Iiiihhh!!
Avatar billede arne_v Ekspert
30. marts 2008 - 23:01 #8
Ä og Æ er jo lidt beslægtet.

Måske er der en bedre collation. Check hvad der er af muligheder.
Avatar billede arne_v Ekspert
30. marts 2008 - 23:01 #9
Og et svar.
Avatar billede arne_v Ekspert
30. marts 2008 - 23:02 #10
Hardcore løsningen er at lave sin egen collation som man vil have den.
Avatar billede tmi Nybegynder
30. marts 2008 - 23:24 #11
personen der valgte at mysql skulle være latin1 som default skulle sammen med personen, der opfandt iso-8859-1, forbydes adgang til computere! Det forhindrer globalisering og skaber kun forvirring og problemer :-(

Og nu jeg er igang med at brokke mig synes jeg også at DK-Hostmaster skulle tage at bruge nogle af alle de millioner de får hvert år til at lave et ordentligt system til registrering og håndtering af domæner. Gad godt vide hvad pengene bliver brugt på! Er der ikke en afdeling hvor man kan brokke sig? :-D

Anyways, tak for hjælpen :-)
Avatar billede arne_v Ekspert
30. marts 2008 - 23:36 #12
ISO-8859-1 nedstammer fra DECMCS og er derfor fra 1985.

Dengang var det et revolutionerende fremskridt at et tegnsæt kunne understøtte både
engelsk, dansk, tysk og fransk (i modsætning til US ASCII og ISO 646).

Og det kostede sikkert 30 års fængsel at eksportere en computer til Kina.

Udviklingen er gået stærkt siden dengang !
Avatar billede tmi Nybegynder
31. marts 2008 - 00:02 #13
Ah, godt med lidt historie :-)
Gloede lige lidt på nettet, kan se at UTF-8 kom frem i jan 1993 og den første MySQL kom frem i maj 1995. Mærkeligt at man har valgt en standard der forstår danske tegn fremfor en der forstår alle tegn når det nu allerede var på plads. Men der tænkte de jo nok ikke over at folk i kina ville bruge deres software, fair nok :-) Men nu har de så også haft 13 år til at rette op på det, og utf-8 er jo standard i linux og i alle webbrowsere, så synes ikke de er undskyldt, de er næsten 16 år bagud :-(
Sov godt :-)
Avatar billede arne_v Ekspert
31. marts 2008 - 00:35 #14
I 1995 var der ikke meget der kunne bruge Unicode og UTF-8. Det ville have været
håbløst for MySQL at starte op med det som default.

Det var først med sidst i 90'erne teknologier som:
  - Windows 2000
  - Java
  - XML
at de rigtigt slog igennem.

Jeg ved ikke hvorfor de ikke har skiftet default.

De har ikke engang i den nye 5.1:

http://mysql2.mirrors-r-us.net/doc/refman/5.1/en/character-sets.html

Men kontrollerer du serveren mener jeg at du kan ændre default for hele serveren.
Avatar billede arne_v Ekspert
31. marts 2008 - 00:35 #15
Og det varer lidt inden jeg skal sove - her er klokken kun 18:35.
Avatar billede tmi Nybegynder
14. april 2008 - 21:57 #16
Hejsa,

jeg fik ikke nogen emails om at du havde svaret. Hvor bor du da?
Men jeg har lige et spørgsmål mere.. Måske er det mig der er helt blæst, men giver dette mening?

mysql> create table test (test varchar(20) not null) charset utf8 collate utf8_danish_ci;
Query OK, 0 rows affected (0.01 sec)

mysql> insert into test values('aalborg'),('ålborg');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> alter table test add primary key (test);
ERROR 1062 (23000): Duplicate entry 'ålborg' for key 1
mysql> select * from test where test like 'ålborg';
+---------+
| test    |
+---------+
| ålborg |
+---------+
1 row in set (0.00 sec)

Hvis den siger der findes en dublet, hvorfor får jeg den så ikke vist? Giver jo ikke nogen mening at jeg ikke må tilføje samme ord med hhv AA hhv Å, når jeg ikke kan søge på det.. Fx for at check om brugernavn er ledigt, men vil så få en fejl ved insert?
Avatar billede tmi Nybegynder
14. april 2008 - 21:59 #17
Det er muligt med latin1, som er case insensitive iøvrigt. Så må næsten være mig der har kokset i det eller misforstået noget?
Avatar billede arne_v Ekspert
15. april 2008 - 04:27 #18
Jeg bor midt imellem Boston og New York.
Avatar billede arne_v Ekspert
15. april 2008 - 04:29 #19
På dansk er aa og å vel det samme og så har den jo ret. Der er duplikat.

Like finder den så ikke, hvilket er lidt inkonsistent.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester