WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Är MyISAM + latin1 standard? (https://www.wn.se/forum/showthread.php?t=27616)

wizzo 2008-03-02 15:12

Är MyISAM + latin1 standard? Eller borde jag ändra CHARSET=utf8, hur gör man det isåfall anger man bara den röda koden i sitt MySQL Query Browser script?

Citat:


mysql> SHOW CREATE TABLE webbshop.genre;
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| genre | CREATE TABLE `genre` (
`genre_id` smallint(5) unsigned NOT NULL auto_increment,
`beskrivning` varchar(30) NOT NULL,
PRIMARY KEY (`genre_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql>


hnn 2008-03-02 19:17

Om du ändrar till UTF8, så får du ändra anslutning, filer, alla teckenkodningar till UTF8.


latin1 är i princip standard i sverige.

wizzo 2008-03-02 20:39

Alla mina html/css sidor använder och sparas i UTF8. Mina SQL script filer sparas också i UTF8 automatiskt i min texteditor.
Men vad menar du med att jag måste ändra anslutning? Syftar du på MySQL anslutningen i min <?php ... ?> kodsnutt.

Citat:


<?php
// Connecting, selecting database
$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
or die('Could not connect: ' . mysql_error());

echo 'Connected successfully';
mysql_select_db('my_database') or die('Could not select database');

// Performing SQL query
$query = 'SELECT * FROM my_table';
$result = mysql_query($query) or die('Query failed: ' . mysql_error());

// Printing results in HTML
echo "<table>\n";
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
echo "\t<tr>\n";
foreach ($line as $col_value) {
echo "\t\t<td>$col_value</td>\n";
}
echo "\t</tr>\n";
}
echo "</table>\n";

// Free resultset
mysql_free_result($result);

// Closing connection
mysql_close($link);
?>


hnn 2008-03-02 20:43

Typ:

Citat:

$this->query('SET NAMES "UTF8"');
$this->query('SET CHARACTER SET UTF8');


wizzo 2008-03-02 20:48

Ojdå lite för avancerad programmeringssyntax för min smak. Är rädd för att jag inte kan kontrollera och testa den här typen av kodning ännu. Tack för tipset iallafall.

Jonas 2008-03-02 21:02

Citat:

Originally posted by wizzo@Mar 2 2008, 21:48
Ojdå lite för avancerad programmeringssyntax för min smak. Är rädd för att jag inte kan kontrollera och testa den här typen av kodning ännu. Tack för tipset iallafall.
Teckenkodningen i PHP är standard iso-8859-1, därför är latin1 standard i mysql kopplingen från PHP.
Du kan använda vilken teckenkodning som helst när du sparar data i php, är htmlsidan i latin1, och du sparar text i utf8 så kommer tecken att se lite skum ut i mysql, men den kommer att visas rätt på sidan.

Det hnn menar är att den första frågan till mysql efter anslutningen och val av databas skall vara:
Kod:

mysql_query("SET NAMES utf8;");
Vilket kommer att ställa om php's teckenkodning i anslutningen till utf8 (MySQL 4.0 eller senare)

wizzo 2008-03-02 23:11

Jag blir inte mycket klokare på det hela efter att ha läst en del om Characters sets och Collations på MySQLs hemsida. Bl.a. det här.
http://dev.mysql.com/doc/refman/5.0/en/cha...t-database.html

När vet man när man ska välja ett specifikt Character set och Collations istället för default som kommer med installationen?
Om jag kör med nedanstående default värden kommer jag få problem med min databas ifall jag nån gång i framtiden ska flytta över databasen till ett webbhotell som inte har sina servrar och kontor i Sverige?
Kod:

character_set_database latin1
collation_database latin1_swedish_ci

Vad för Character set + Collation bör man köra med för att göra sin databas internationell? Dvs. den ska kunna flyttas mellan olika länders webbhotell utan att det blir problem med datat i databaserna samt databasens skelett.

Magnus_A 2008-03-03 11:19

UTF-8 bör absolut användas som standard åtminstone i alla nya projekt.
Varför: Det är inte svårare, bara man ställer in rätt från början. Det är framtidssäkert, eftersom det fungerar nu och kommer att fungera i alla webbläsare. Och det är synkroniserat med officiell ISO-standard för teckenkodningar ISO/IEC 10646

Lumax 2008-03-03 11:27

Den största omedelbara fördelen med att använda UTF-8 är att du t.ex. slipper använda &auml; och kan köra med åäö som vanligt. Däremot så använder du helt andra strängjämförelsefunktioner i PHP (mb_string) vilket gör att du inte helt lätt bara kan gå över till UTF-8. Men vid nya projekt är det värt att överväga.

wizzo 2008-03-09 14:11

Ny fråga.

1.) Språk drop down lista.
När man loggar in i phpmyadmin då får man frågan "Språk" med en drop down lista. I listan finns UTF8 i alla möjliga språk om jag idag loggar in med "Swedish UTF8" och lägger in lite tabeller och data. Sedan om en vecka då råkar jag logga in med "Arabic UTF8" och lägger in lite tabeller och data. Får jag en korrupt databas med en massa konflikter i slutändan?

2.) Olika kollationering i en tabell eller mellan tabeller.
Som rubriken säger vad för konsekvenser råkar man ut för då om man har en stor databas med olika kollationering mellan tabeller?

3.) Vad är skillnaden mellan dessa kollationeringar gör dem inte samma sak?
utf8_bin Unicode (flerspråkig), Binär
utf8_general_ci Unicode (flerspråkig), skiftlägesokänsligt
utf8_unicode_ci Unicode (flerspråkig), skiftlägesokänsligt
utf8_swedish_ci Svensk, skiftlägesokänsligt

4.) Webhosten har skapat dessa kollationeringar.
Behöver jag synkronisera alla deras förinstallerade databaser så att dem antingen lyder under "UFT8_general_ci" respektive "LATIN1_swedish_ci" för att saker och ting ska stämma överens med mina egenskapade UTF8 databaser/tabeller?
Kod:

information_schema  utf8_general_ci 
mysql            latin1_swedish_ci


dAEk 2008-03-11 00:03

Citat:

Originally posted by Fredrik S@Mar 3 2008, 12:27
Den största omedelbara fördelen med att använda UTF-8 är att du t.ex. slipper använda &auml; och kan köra med åäö som vanligt.
ÅÄÖ ingår i latin1 så man behöver inte hålla på och mecka med html-entiteter i det fallet.

Lumax 2008-03-11 00:23

Haha, sant! :)

dAEk 2008-03-11 00:27

Citat:

Ursprungligen postat av wizzo
1.) Språk drop down lista.
När man loggar in i phpmyadmin då får man frågan Språk med en drop down lista. I listan finns UTF8 i alla möjliga språk om jag idag loggar in med Swedish UTF8 och lägger in lite tabeller och data. Sedan om en vecka då råkar jag logga in med Arabic UTF8 och lägger in lite tabeller och data. Får jag en korrupt databas med en massa konflikter i slutändan?


Antagligen lär det bli galet, ja, men korrupt? Det kommer nog inte vara troligt att du får rätt resultat i varje fall. Jag har inte använt phpmyadmin själv men det är väl inte helt otroligt om det används en relaterad collation för vald charset och då lär det ju bli knas om du sparar svenska tecken med arabiska sorteringsalgoritmer och regler.

Följande länk ger exempel där det kan bli "fel" resultat om man väljer "fel" collation: http://dev.mysql.com/doc/refman/5.0/...code-sets.html

Fråga #3 får någon annan ta. ;)
(Jag vet inte).


Citat:

Ursprungligen postat av wizzo
4.) Webhosten har skapat dessa kollationeringar.

Det ska gå att konvertera från en collation till ett annan i SQL-frågorna, men det är typ allt jag vet. I alla fall, jag hade nog tagit mig tid och gjort det på riktigt (dvs ändra så att det blir rätt i databasen) istället för att hålla på och konvertera mellan olika charsets i applikationen eller i datalagret. På samma sätt som det blir fel när man har en encoding i databasen och en annan i applikationen kan jag tänka mig att det blir knas vid sorteringen, men jag vet inte säkert. Hoppas att någon annan kan hjälpa dig mer.

Magnus_A 2008-03-11 18:10

Citat:

Originally posted by wizzo@Mar 9 2008, 15:11
Ny fråga.

3.) Vad är skillnaden mellan dessa kollationeringar gör dem inte samma sak?
utf8_bin Unicode (flerspråkig), Binär
utf8_general_ci Unicode (flerspråkig), skiftlägesokänsligt
utf8_unicode_ci Unicode (flerspråkig), skiftlägesokänsligt
utf8_swedish_ci Svensk, skiftlägesokänsligt


SELECT * FROM `tabell` order by tabell
utf8_bin Unicode (flerspråkig), Binär =>
+-----+
| A |
| a |
| Ä |
| Å |
| ä |
| å |
+-----+
utf8_general_ci Unicode (flerspråkig), skiftlägesokänsligt 0>
+-----+
| å |
| ä |
| Å |
| Ä |
| a |
| A |
+-----+
utf8_unicode_ci Unicode (flerspråkig), skiftlägesokänsligt =>
+-----+
| å |
| ä |
| Å |
| Ä |
| a |
| A |
+-----+
utf8_swedish_ci Svensk, skiftlägesokänsligt =>
+-----+
| a |
| A |
| å |
| Å |
| ä |
| Ä |
+-----+

wizzo 2008-03-11 21:09

Citat:

Ursprungligen postat av Magnus_A
Citat:

Ursprungligen postat av wizzo
Ny fråga.

3.) Vad är skillnaden mellan dessa kollationeringar gör dem inte samma sak?
utf8_bin Unicode (flerspråkig), Binär
utf8_general_ci Unicode (flerspråkig), skiftlägesokänsligt
utf8_unicode_ci Unicode (flerspråkig), skiftlägesokänsligt
utf8_swedish_ci Svensk, skiftlägesokänsligt


ic då kör jag nog med samma kollationering som webhosten har gjort så slipper man tänka så mycket.
Kod:

information_schema  utf8_general_ci


Alla tider är GMT +2. Klockan är nu 01:00.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson